Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Lógica do while

Alguém poderia me explicar? No seguinte código:

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 100');
    // se chute for igual ao número secreto
    if (chute == numeroSecreto) {
        alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto}`);
    } else {
        if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else {
            alert(`O número secreto é maior que ${chute}`);
        }

Eu entendi que o while só irá executar o código enquanto a condição for verdadeira... então qual o sentido do 'if (chute == numeroSecreto)' dentro do while? Tipo, na minha cabeça, se a pessoa acertasse de primeira esse código não deveria rodar, já que a condição do while é falsa.

Na minha cabeça, deveria ser assim:

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 100');
    // se chute for diferente do número secreto
        if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else {
            alert(`O número secreto é maior que ${chute}`);
        }
  if (chute == numeroSecreto) {
        alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto}`);

Na minha cabeça faria mais sentido assim, pois o while só seria executado caso a condição seja verdadeira... se eu colocar um if trazendo uma condição que seja false pro while, na minha concepção ele não deveria rodar... alguém poderia me explicar por que o código da aula rodou então?

1 resposta
solução!

Bom dia, Júlio.

Você parece ter só invertido a ordem das condicionais.

O while loop vai avaliar se a condição é verdadeira no início do loop. Se for verdadeira, vai executar o bloco inteiro e vai avaliar a condição novamento no final! O código dentro do bloco continua sendo executado até o final mesmo que a condição vire falsa durante a execução.

No exercício, quando chute é declarado, não há valor atribuído, então o while-loop sempre se inicia com a condição verdadeira:

let numeroSecreto = 5;
let chute // chute é undefined

// todo o bloco do while vai ser executado, pois (undefined != 5) é avaliado como "true" inicialmente
while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 100');
    
    if (chute == numeroSecreto) { // se você escolheu 5 no prompt, então só a mensagem de sucesso vai aparecer...
        alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto}`);
    } else { // ... caso contrário, aparecerá uma dessas duas
        if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else {
            alert(`O número secreto é maior que ${chute}`);
        }
    } // fim do if
} // fim do while. Aqui a condição inicial será testada de novo. Se continuar verdadeira, começa tudo de novo.

Espero que tenha ficado mais claro.

Happy coding!