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 usebreakpara 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
whilecom um índice para percorrer o array de palpites. - Use
if/else if/elsepara comparar e imprimir as mensagens. - Use
breakao 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
- Definimos
const secreto = 93;para que a saída seja previsível. Em um jogo real, usaríamosMath.floor(Math.random() * 100) + 1. - O array
palpitescontém a sequência de tentativas simuladas. - A variável
icontrola a posição atual no array, eacertouregistra se o jogador venceu. - O
while (i < palpites.length)percorre o array enquanto houver palpites. - Dentro do laço, comparamos o palpite atual com
secretousandoif/else if/else. - Se o palpite for menor, imprimimos
'Muito baixo!'; se maior,'Muito alto!'. - Se for igual, imprimimos
'Acertou!', marcamosacertou = truee usamosbreakpara sair do laço. - 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 dowhile: o laço fica infinito, poisinunca muda. Sempre garanta que a condição de parada será eventualmente falsa. - Colocar o
breakfora doelse: se estiver após oif/else if/else, o laço sempre quebra na primeira iteração, independentemente do palpite. - Não usar flag
acertoue verificari === palpites.lengthapós o laço: se o último palpite for o acerto, obreakimpede queichegue 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!