3
respostas

[Dúvida] Número de tentativas ao final do jogo continua aparecendo errado.

Imagem com número de tentativas errado para muito mais

Segue o código:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Oii, Ana. Tudo bem?

Não consegui visualizar. Para você compartilhar códigos de maneira organizada aqui no fórum você pode utilizar a opção abaixo:

Opção inserir bloco de código, da caixa de perguntas do fórum da alura

Após selecionar a opção abaixo irá mostrar uma estrutura da seguinte maneira:

Opção de bloco de código sendo illustrada

O resultado será o seguinte:

Copie o seu código aqui

Fico no aguardo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = parseInt(Math.random() * 100) + 1;
console.log(numeroSecreto);
let chute;
let tentativas = 1;

while(chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 100');
    if (chute == numeroSecreto) {
      break;
    } else {
        if (chute > numeroSecreto){
            alert(`O número secreto é menor que ${chute}.`);
        }    else{
                alert(`O número secreto é maior que ${chute}.`);
            }
        tentativas++;    
    }
}

let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
    alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} ${palavraTentativa}.`);

Oi, Ana.

Obrigada por compartilhar.

Existe um detalhe sutil de precedência matemática que pode causar confusão:

  1. Seu código: parseInt(Math.random() * 100) + 1
    • Aqui, você transforma o número quebrado em inteiro antes de somar 1.
  2. Código correto: parseInt(Math.random() * 100 + 1)
    • Aqui, a soma acontece dentro do parêntese do parseInt.

Por que o número de tentativas ficou tão alto?

Se o alerta exibiu mais de 300 mil tentativas, é provável que, em algum momento do teste, o código tenha entrado em um loop infinito ou o valor de numeroSecreto tenha se tornado algo que o prompt (que retorna texto) não conseguia validar corretamente como igual.

Para resolver, tente seguir estes passos:
Faça a correção:

alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = parseInt(Math.random() * 100 + 1);
console.log(numeroSecreto);
let chute;
let tentativas = 1;

// enquanto chute não for igual ao n.s.
while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 100');
    // se chute for igual ao número secreto
    if (chute == numeroSecreto) {
        break;
    } else {
        if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else {
            alert(`O número secreto é maior que ${chute}`);
        }
        // tentativas = tentativas + 1;
        tentativas++;
    }
}

let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} ${palavraTentativa}.`);

Feche e rode de novo o código. Lembre de usar o Live Server.

Se você rodar o código novamente com essas pequenas mudanças e o erro de milhares de tentativas persistir, verifique se não há outro script rodando em paralelo no seu arquivo HTML que possa estar interferindo na variável tentativas.

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