1
resposta

travado em undefined

o código deixa a tela travada em undefined

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

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

Oii, Alan! Tudo bem?

Entendo perfeitamente o que está acontecendo. Essa sensação de o código "travar" é muito comum quando entramos no que chamamos de loop infinito.

O problema tá em um detalhe bem sutil na comparação que você fez dentro do while. Vamos analisar juntos?

O Problema: Tipos de dados

O JavaScript faz distinção entre Texto (String) e Número (Number) dependendo do operador que usamos:

  1. O comando prompt sempre retorna um texto (ex: "5").
  2. A sua variável numeroSecreto é um número (ex: 5).
  3. Você usou o operador !== (estritamente diferente).

A lógica do erro:
Quando você digita 5, o prompt entrega "5".
O seu while pergunta: O texto "5" é estritamente diferente do número 5?
A resposta é SIM (porque um é texto e o outro é número). Como a resposta é sim, o loop continua rodando eternamente, mesmo que você acerte o número.

Pra corrigir, basta trocar o operador !== por != (apenas uma igualdade). O operador != é mais "flexível": ele converte o texto para número antes de comparar, permitindo que o loop entenda que "5" é igual a 5 e, portanto, pare a execução.

Código corrigido:

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

// Perceba a mudança aqui: de !== para !=
while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');
    
    // 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}`);
    }
}

Dica Extra:
No futuro, outra forma de resolver isso é garantir que o chute seja sempre um número, envolvendo o prompt com um parseInt, assim:
chute = parseInt(prompt('Escolha um número entre 1 e 10'));. Mas você verá isso no curso mais pra frente.

Faça essa alteração do sinal.

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