1
resposta

[Dúvida] Nossa coloquei o contador e meu computador travou. Para parar ou evitar a repetição eu preciso decrementá-lo?

Nossa coloquei o contador e meu computador travou. Para parar ou evitar a repetição eu preciso decrementá-lo?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Marcos! Tudo bem?

Sim, você está absolutamente certo, e sinto muito que seu computador tenha travado. Essa é uma experiência clássica (e um pouco assustadora, eu sei) que quase todo programador passa ao encontrar seu primeiro loop infinito. Fique tranquilo, isso faz parte do aprendizado.

Sua intuição está corretíssima: para o loop parar, você precisa decrementar o contador.

A Lógica do Loop while:

Pense no while como um porteiro que só deixa o código dentro dele ser executado se uma condição for verdadeira.

No código do Willian, a condição é: while (contador > 0)
Isso significa: "Enquanto a variável contador for maior que zero, execute o bloco de código repetidamente".

O problema (O porquê travou):

  1. Você digita 3 como a quantidade de números. A variável contador começa valendo 3.
  2. O while verifica: contador (que é 3) é maior que 0? Sim. Então ele entra no loop.
  3. Ele pede um número e soma ao total.
  4. O loop termina e ele volta para o início para verificar a condição de novo.
  5. O while pergunta de novo: contador (que ainda é 3) é maior que 0? Sim. Ele entra no loop de novo.

Perceba que o valor da variável contador nunca muda. Se ela começou com 3, ela será sempre 3. Se a condição 3 > 0 foi verdadeira na primeira vez, ela será verdadeira para sempre. Isso cria um ciclo sem fim, o loop infinito, que consome os recursos do seu computador e o faz travar.

Ao adicionar a linha contador-- dentro do loop, você está criando uma "escada" para que a condição de parada seja alcançada.

Veja o que acontece agora:

  1. contador começa valendo 3. A condição 3 > 0 é verdadeira.
  2. O loop executa, pede um número e, no final, o contador-- transforma o 3 em 2.
  3. O while verifica de novo: contador (que agora é 2) é maior que 0? Sim.
  4. O loop executa e o contador-- transforma o 2 em 1.
  5. O while verifica de novo: contador (que agora é 1) é maior que 0? Sim.
  6. O loop executa e o contador-- transforma o 1 em 0.
  7. O while verifica pela última vez: contador (que agora é 0) é maior que 0? Não!
  8. A condição se torna falsa e o programa finalmente sai do loop e continua para a linha seguinte, que calcula a média.

O código corrigido fica assim:

let qtdNumeros = prompt('Digite a quantidade de números para o cálculo da média:');
let soma = 0;
let contador = qtdNumeros;

while(contador > 0){
    let numero = parseInt(prompt('Digite o numero:'));
    soma += numero;
    
    // AQUI ESTÁ A MÁGICA! 
    // A cada volta, diminuímos 1 do contador para que ele chegue a zero.
    contador--; 
}

let media = soma / qtdNumeros;
console.log(`A média é: ${media}`);

A regra de ouro para loops é: a variável que controla a condição de parada precisa ser modificada dentro do loop para que, em algum momento, a condição se torne falsa.

Não se preocupe com o travamento. Agora você entende na prática o que é um loop infinito e, mais importante, como corrigi-lo. Parabéns por investigar a fundo e fazer a pergunta certa.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!