Desafio JavaScript

Jogo de adivinhação com while e break

Enunciado

Implemente um jogo de adivinhação. O programa deve sortear um número secreto entre 1 e 100 e permitir que o usuário tente adivinhar. Como não há entrada interativa, simule uma sequência de palpites em um array palpites (ex.: [50, 75, 88, 93, 95]). Use um laço while para percorrer os palpites até acertar ou esgotá-los. Para cada palpite:

  • Se for menor que o secreto, imprima 'Muito baixo!' e continue.
  • Se for maior, imprima 'Muito alto!' e continue.
  • Se for igual, imprima 'Acertou!' e use break para encerrar.

Se os palpites acabarem sem acerto, imprima 'Não acertou. O número era X' (X é o secreto). Use Math.random() para gerar o número secreto, mas para este exemplo, fixe o secreto em 93 para que a saída seja determinística.

Requisitos

  • Gere um número secreto entre 1 e 100 (pode fixar em 93 para teste).
  • Use um laço while com um índice para percorrer o array de palpites.
  • Use if/else if/else para comparar e imprimir as mensagens.
  • Use break ao acertar e trate o caso de não acertar.

Código inicial

const secreto = 93; // fixo para teste
const palpites = [50, 75, 88, 93, 95];
let i = 0;
// Use while, if/else if/else, break

Saída esperada

Muito baixo!
Muito baixo!
Muito baixo!
Acertou!
Ver dica

Dentro do while, compare o palpite atual com o secreto. Use i++ para avançar. Após o laço, verifique se o último palpite não foi o acerto para imprimir a mensagem final.

Mostrar solução
// Jogo de adivinhação com while e break
const secreto = 93; // fixo para saída determinística
const palpites = [50, 75, 88, 93, 95];
let i = 0;
let acertou = false;

while (i < palpites.length) {
  const palpite = palpites[i];
  
  if (palpite < secreto) {
    console.log('Muito baixo!');
  } else if (palpite > secreto) {
    console.log('Muito alto!');
  } else {
    console.log('Acertou!');
    acertou = true;
    break; // encerra o laço imediatamente
  }
  
  i++; // avança para o próximo palpite
}

if (!acertou) {
  console.log(`Não acertou. O número era ${secreto}`);
}

Passo a passo

  1. Definimos const secreto = 93; para que a saída seja previsível. Em um jogo real, usaríamos Math.floor(Math.random() * 100) + 1.
  2. O array palpites contém a sequência de tentativas simuladas.
  3. A variável i controla a posição atual no array, e acertou registra se o jogador venceu.
  4. O while (i < palpites.length) percorre o array enquanto houver palpites.
  5. Dentro do laço, comparamos o palpite atual com secreto usando if/else if/else.
  6. Se o palpite for menor, imprimimos 'Muito baixo!'; se maior, 'Muito alto!'.
  7. Se for igual, imprimimos 'Acertou!', marcamos acertou = true e usamos break para sair do laço.
  8. Se o laço terminar sem acerto, o if (!acertou) imprime a mensagem final com o número secreto.

Por que funciona

O while é ideal quando não sabemos quantas iterações serão necessárias — aqui, depende de quando o jogador acerta. O break interrompe o laço assim que o acerto ocorre, evitando processar palpites restantes. A flag acertou permite diferenciar término por acerto de término por esgotamento.

Erros comuns

  • Esquecer o i++ dentro do while: o laço fica infinito, pois i nunca muda. Sempre garanta que a condição de parada será eventualmente falsa.
  • Colocar o break fora do else: se estiver após o if/else if/else, o laço sempre quebra na primeira iteração, independentemente do palpite.
  • Não usar flag acertou e verificar i === palpites.length após o laço: se o último palpite for o acerto, o break impede que i chegue ao fim, e a mensagem de erro seria impressa incorretamente.

Outra forma de resolver

Usar for...of com break e uma flag, ou Array.prototype.some para encontrar o palpite. O while é mais explícito para simular tentativas sequenciais com parada antecipada.

Saída esperada

Muito baixo!
Muito baixo!
Muito baixo!
Acertou!