4
respostas

Desafio Loops e tentativas, exercício 1, dúvida

Olá. Na parte de desafios, quanto ao exercício 1 (fazer um contador de 1 a 10), eu fiquei com dúvida com a resolução do instrutor. Eis o código do instrutor:

let contador = 1;
while (contador <= 10) {
    console.log(contador);
    contador++;
}

Quando eu corri isso no VS Code, apareceu o console.log contando de 1 a 10... até aí ok... mas quando eu adicionei o comando ''alert (contador)'' no fim do código, a página indicou que o contador estava em 11... ou seja, mesmo o console.log indicando um contador até 10, o contador (a variável no sistema) de verdade parou em 11 (mas como o while se tornou falso, logo o comando do console.log não iria se realizar ao chegar em 11)... isso não tornaria meu código incorreto? Pois eu pensava que o console.log era só pra auxiliar, mas se formos levar ao ''pé da letra'' o nosso contador, ele estaria em 11. Não sei se deu pra entender a minha dúvida, espero que eu tenha falado direito. Se algúem puder ajudar, agradeço. Foi assim que eu fiz o contador originalmente para aparecer tanto no console.log quanto na página em si:

let contador = 1;
while (contador  != 10) {
    alert(contador);
    console.log(contador);
    contador++;
}
alert(contador);
console.log(contador);
4 respostas

Obs: do mesmo jeito foi no segundo exercício... o contador chegou em -1. Eu ajustei isso colocando no while (contador !=0) ou então >0

Oi, Júlio César! Tudo bem?

O que acontece é que o while executa o bloco de código enquanto a condição for verdadeira. No momento em que a condição se torna falsa, o laço encerra, mas a variável contador já foi incrementada.

No código do instrutor:

let contador = 1;
while (contador <= 10) {
    console.log(contador);
    contador++;
}

Quando contador chega a 10, o console.log imprime esse valor e, logo em seguida, incrementa para 11. Como 11 não atende a condição (contador <= 10), o loop para. No entanto, a variável já foi atualizada para 11, por isso o alert(contador) fora do while exibe esse valor.

No seu código:

let contador = 1;
while (contador != 10) {
    alert(contador);
    console.log(contador);
    contador++;
}
alert(contador);
console.log(contador);

O problema aqui é a condição do while. Como o loop para quando contador == 10, o último valor mostrado pelo alert será 9. Depois, ao sair do laço, o alert(contador) final exibe 10, o que pode não ser o que você espera.

Para corrigir e garantir que o último valor exibido no alert seja 10, ajuste o while para contador <= 10:

let contador = 1;
while (contador <= 10) {
    alert(contador);
    console.log(contador);
    contador++;
}

Dessa forma, tanto o console quanto o alert exibirão corretamente os valores de 1 a 10.

Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi, Armano. Não entendi o que estava errado no meu código. Quando eu rodei ele, ele só chegou até o número 10, tanto no alert quanto no console log. Eu fiz desse jeito para a variável parar no 10. Se eu tirar o alert e consolelog que estão do lado de fora das {} do while, eles não irão exibir o valor final 10, e se eu coloco a condição <=10, o valor real da variável chegará a 11, mesmo que eu não veja isso no alert ou no consolelog. Então para manter o valor real da variável até no máximo 10, o código que coloquei no início não poderia ser usado?

Oi, Júlio César!

Sobre sua última dúvida: o que você trouxe está correto do ponto de vista de controle da variável. Quando você usa:

let contador = 1;
while (contador != 10) {
    alert(contador);
    console.log(contador);
    contador++;
}
alert(contador);
console.log(contador);

Você garante que o valor máximo de contador dentro do laço seja 9. O alert(contador) e console.log(contador) fora do while mostram o valor real final, que é 10.

Se o seu objetivo é que a variável nunca ultrapasse o 10, essa lógica está alinhada com isso. O que o outro exemplo faz é exibir até 10, mas a variável internamente chega a 11. Isso não invalida o código, só depende de qual comportamento você quer:

  • Para exibir até 10 e não se importar com o valor final da variável → use contador <= 10.
  • Para manter a variável no valor 10 após o loop, como você quis → o seu contador != 10 funciona perfeitamente.

Resumo: seu raciocínio faz sentido sim. O importante é entender quando a condição é testada e quando a variável é incrementada.

Fico à disposição.