1
resposta

[Dúvida] Quando acerta o número, não aparece o número de tentativas

Quando eu acerto o número continua aparecendo essa mensagem se o número é maior ou menor:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
meu código está assim:

let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;

function exibirTextoNaTela(tag, texto) {
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
}

exibirTextoNaTela('h1', 'Jogo do número secreto');
exibirTextoNaTela('p', 'Escolha um número entre 1 e 10');

function verificarChute() {
    let chute = document.querySelector('input').value;
    
    if (chute == numeroSecreto) {
        exibirTextoNaTela('h1', 'Acertou!');
        let palavraTentativa = tentativa > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativas = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}`;
        exibirTextoNaTela('p', mensagemTentativas);
    }  else {
        if (chute > numeroSecreto) {
            exibirTextoNaTela('p', 'O número secreto é menor');
        } else { 
            exibirTextoNaTela('p', 'O número secreto é maior');
        }
        tentativas++;
    }
}

function gerarNumeroAleatorio() {
    return parseInt(Math.random() * 10 + 1);
}
1 resposta

Oi, Isac.

É muito comum que pequenos detalhes na escrita das variáveis causem esses comportamentos inesperados na programação. Analisando o seu código, identifiquei um erro de digitação que impede a exibição da mensagem correta.

O erro de digitação (Erro de Referência):

Dentro da função verificarChute, você declarou a variável como tentativas (no plural) logo no início do arquivo, mas, no momento de criar a lógica do texto, você utilizou o nome no singular:

// Como está no seu código:
let palavraTentativa = tentativa > 1 ? 'tentativas' : 'tentativa'; 

// Como deveria ser:
let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';

O JavaScript não consegue encontrar a variável tentativa, o que interrompe a execução daquela linha e faz com que a mensagem com o número de vezes não seja enviada para a tela.

Por que a mensagem de "maior ou menor" continua aparecendo?

Como o erro acontece logo na linha da palavraTentativa, a função "quebra" antes de chegar no comando exibirTextoNaTela('p', mensagemTentativas). Por isso, o parágrafo mantém o texto anterior (que informava se o número era maior ou menor).

Código corrigido

Basta ajustar o nome da variável para o plural dentro do if. Veja o bloco ajustado:

function verificarChute() {
    let chute = document.querySelector('input').value;
    
    if (chute == numeroSecreto) {
        exibirTextoNaTela('h1', 'Acertou!');
        // Ajuste aqui: de 'tentativa' para 'tentativas'
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativas = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}`;
        exibirTextoNaTela('p', mensagemTentativas);
    } else {
        if (chute > numeroSecreto) {
            exibirTextoNaTela('p', 'O número secreto é menor');
        } else { 
            exibirTextoNaTela('p', 'O número secreto é maior');
        }
        tentativas++;
    }
}

Após essa alteração, o texto deve aparecer conforme o esperado assim que o acerto ocorrer.

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