Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não entendi o uso do let com o while

Não entendi algo desse código:

alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = 5;
let chute;

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');
    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}`);
    }
}

Dúvida: na terceira linha ele não define o que seria o chute, só cria a variável... depois dentro do while ele associa o chute ao prompt, mas não usa o comando let... eu não teria que usar o comando let antes para associar as duas coisas? Poderia ser assim?:


alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = 5;
let chute = prompt('Escolha um número entre 1 e 10');
while (chute != numeroSecreto) {
    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}`);
    }
}
3 respostas

Oi, espero conseguir te ajudar, vamos analisar o código:

Nessa parte estamos declarando as variáveis, o “let” é uma palavra reservada em JavaScript para declaração de variáveis que podem ter seu valor alterado ao longo do código

let numeroSecreto = 5; então aqui temos a variavel que vai determinar o numero secreto
let chute; e aqui a variavel que vai receber o valor do chute

Em seguida, temos o nosso loop que vai rodar enquanto o chute for um valor diferente do número secreto (ou quando for igual, ele já entra na condição de exibir a mensagem de parabéns) ou seja, enquanto o usuário digitar um valor diferente de 5, esse código vai estar em execução:

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');
    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}`);
    }
}

Caso a pessoa acerte direto o numero já vai exibir a mensagem:

 if (chute == numeroSecreto) {
        alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto}`);
    } 

Agora, se o número digitado (chute) for maior que o número secreto, por exemplo, o 6 o código entra na condição:

 } else if (chute > numeroSecreto) {
        alert(`O número secreto é menor que ${chute}`);
    }

Ou na outra condição se a pessoa digitar um número menor. Como o chute digitado ainda é diferente do numero secreto o loop vai exbir novamente a mensagem que pede para a pessoa digitar um número e com isso o valor da variavel vai ser alterado:

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');

Agora vamos analisar a versão que você enviou:

Aqui você já define o valor da variável chute fora do loop de execução, isso significa que não vai pedir pra ser digitado o valor novamente.

let chute = prompt('Escolha um número entre 1 e 10');

Quando o loop for rodar, ele vai cair em uma das condições, mas como o valor da variável foi definido uma única vez, ele entra em um loop infinito.

while (chute != numeroSecreto) {
    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}`);
    }
}

Por exemplo se a pessoa digitar o valor 6, o loop vai verificar que é um numero diferente do numero secreto e procurar a condição que se encaixa:

 } else if (chute > numeroSecreto) {
        alert(`O número secreto é menor que ${chute}`);

então vai ficar imprimindo sempre a mensagem do alert: O número secreto é menor que 6 infinitamente. Ou então se a pessoa digitar logo de cara o número 5 não entra nem no loop e não exibe a mensagem de parabéns.

Espero ajudado!

Desculpe, não consegui entender. Não poderiamos entao definir o chute dentro do while?

solução!

Sim, o chute é definido dentro do while conforme o primeiro código que você enviou :

alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = 5;
let chute;

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');
    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}`);
    }
}

Assim quando o usuário digitar o valor e não ser o número secreto ele repete a opção: chute = prompt('Escolha um número entre 1 e 10'); e recebe um novo valor.

Agora no segundo código que você enviou só vai pedir pro usuário digitar uma vez porque esta declarando fora do laço de repetição while. O correto é estar dentro do while.

alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = 5;
let chute = prompt('Escolha um número entre 1 e 10');
while (chute != numeroSecreto) {
    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}`);
    }
}

Correto(para a proposta do jogo):

while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');

Incorreto (para a proposta do jogo):

let chute = prompt('Escolha um número entre 1 e 10');
while (chute != numeroSecreto) {

Talvez fique mais perceptível se você executar os 2 códigos que você enviou e ver como eles se comportam. Espero ter ajudado, qualquer duvida me avisa.