2
respostas

[Bug] Número sorteado maior do que quatro, sem limite!

Porque depois que eu chuto o número 4, as vezes o texto exibido na tela diz que o número secreto é maior, porém o código na função estabelece que: let numeroEscolhido = parseInt(Math.random() * numeroLimite + 1); Alguém me ajuda?


/* let titulo = document.querySelector("h1"); titulo.innerHTML = "Jogo do número secreto";

let paragrafo = document.querySelector("p"); paragrafo.innerHTML = "Escolha um número entre 1 e 10";

function verificarChute(){ console.log("botão foi clicado") } */ let listaDeNumerosSorteados = []; let numeroLimite = 4; let tentativas = 1;

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

function exibirMensagemInicial() { exibirTextoNaTela('h1', 'Jogo do número secreto'); exibirTextoNaTela('p', 'Escolha um número entre 1 e 4'); }

function gerarNumeroAleatorio() { let numeroEscolhido = parseInt(Math.random() * numeroLimite + 1); let quantidadeDeElementosNaLista = listaDeNumerosSorteados.length; if (quantidadeDeElementosNaLista == numeroLimite) { listaDeNumerosSorteados = []; } if (listaDeNumerosSorteados.includes(numeroEscolhido)) { return gerarNumeroAleatorio(); } else { listaDeNumerosSorteados.push(numeroEscolhido); console.log(listaDeNumerosSorteados); return numeroEscolhido; } }

let numeroSecreto = gerarNumeroAleatorio(); // Inicializa numeroSecreto aqui

function verificarChute() { let chute = document.querySelector("input").value; if (chute == numeroSecreto) { exibirTextoNaTela('h1', 'Acertou!');

    let palavraTentativa = tentativas > 1 ? "tentativas!" : "tentativa!";
    let mensagemTentativas = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}`;
    exibirTextoNaTela('p', mensagemTentativas);
    document.getElementById('reiniciar').removeAttribute('disabled');
} else {
    if (chute > numeroSecreto) {
        exibirTextoNaTela('p', 'O número secreto é menor que o chute');
    } else {
        exibirTextoNaTela('p', 'O número secreto é maior');
    }
    tentativas++;
    limparCampo();
}

}

function limparCampo() { let chute = document.querySelector('input'); chute.value = ''; }

function reiniciarJogo() { numeroSecreto = gerarNumeroAleatorio(); limparCampo(); tentativas = 1; exibirMensagemInicial(); document.getElementById('reiniciar').setAttribute('disabled', true); }

exibirMensagemInicial();


2 respostas

Após pesquisar, resolvi colocando esta linha de código: let numeroEscolhido = Math.floor(Math.random() * numeroLimite) + 1; no lugar de let numeroEscolhido = parseInt(Math.random() * numeroLimite + 1);

Oi Roger, tudo bem? 😊

Excelente que você tenha investigado e encontrado a solução! 👍

O problema estava na forma como você estava gerando o número aleatório.

parseInt() remove a parte decimal de um número, mas não garante que o resultado esteja dentro do intervalo desejado.

Math.random() gera um número entre 0 (inclusivo) e 1 (exclusivo).

Ao multiplicar por numeroLimite e somar 1, você pode obter um número maior que o limite, dependendo do valor gerado por Math.random().

A função Math.floor() arredonda o número para o inteiro mais próximo, garantindo que o resultado esteja sempre dentro do intervalo desejado.

Ao usar Math.floor(Math.random() * numeroLimite) + 1, você garante que o número gerado esteja sempre entre 1 e numeroLimite, inclusive.

🎓 Para saber mais:

Continue praticando e explorando novas soluções! 🤔