7
respostas

Função criada - sorteia - Erro: n is not defined

Pessoal, estou no início da criação do exercício, e criei o seguinte código:

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

        return Math.round(Math.random(n) * 100);
    }

    var numeroPensado = sorteia(n);

    var chute = parseInt(prompt("Já 'pensei' em um número. Qual você acha que é?"));

    if(chute == numeroPensado) {

        mostra("Uau! Você acertou, pois eu 'pensei' no número " + numeroPensado);
    } else {

        mostra("Você errou! Eu tinha pensado no número " + numeroPensado);
    }
</script>

Porém, ele não funciona. No console, dá um erro:

"jogo_adivinha.html:20 Uncaught ReferenceError: n is not defined at jogo_adivinha.html:20"

Já posso antecipar que o erro está na criação da função, mas não sei porque. Podem me ajudar, por gentileza?

Grato. :)

7 respostas

Estranho. Tive que declarar a variável, antes. Isso está correto? :)

Grato mais uma vez.

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

        return Math.round(Math.random(n) * 100);
    }
    var n = 0
    var numeroPensado = sorteia(n);

    var chute = parseInt(prompt("Já 'pensei' em um número. Qual você acha que é?"));

    if(chute == numeroPensado) {

        mostra("Uau! Você acertou, pois eu 'pensei' no número " + numeroPensado);
    } else {

        mostra("Você errou! Eu tinha pensado no número " + numeroPensado);
    }
</script>

Olá Marcos, tudo bem?

Não é preciso declarar a variável n e nem atribuir um valor a ela como você fez no exemplo.

Ao criar a função sorteia, você não precisa passar nenhum parâmetro para a função Math.random. Dessa forma, você retira o n que havia passado como parâmetro para ela no seu código e o move para o lugar do número 100. O seu código ficará assim:

function sorteia(n) {
    return Math.round(Math.random() * n);
}

Com a função sorteia criada corretamente, você vai acioná-la e agora sim passará como parâmetro um número que vai decidir o limite que pode ser sorteado pela função sorteia. No exemplo, o instrutor decidiu que poderiam ser sorteados números de 0 a 10, por isso passou como parâmetro o número 10. Sua linha de código ficará assim:

 var numeroPensado = sorteia(10);

Nessa linha, o número sorteado pela função foi atribuído a variável numeroPensado. Bom, a partir disso, você consegue desenvolver o resto do código normalmente.

Espero ter ajudado! Abç!

Oi Gabriel, bom dia, tudo bem, e com você?

Ajudou com certeza. Muito obrigado, entendi. :)

Mas, o meu código também não estava errado, certo? Ou estava? rsrsrs

Abraços!

Olá, tudo bem?

Poderia me ajudar?

Agora, o programa está sempre "sorteando" o mesmo número, nas 3 tentativas:

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br><br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {
       return Math.round(Math.random() * n);
    }

    var n = 0
    var numeroPensado = sorteia(10);
    var tentativas = 1;

    while(tentativas <= 3) {
        var chute = parseInt(prompt("Já 'pensei' em um número. Qual você acha que é (de 0 a 10)? " + tentativas + "/3"));

        if(chute == numeroPensado) {

            mostra("Uau! Você acertou, pois eu 'pensei' no número " + numeroPensado + "!");
            break;

        } else {

            mostra("Você errou! Eu tinha pensado no número " + numeroPensado + "!");

            if(chute > numeroPensado) {
                mostra("O número que você pensou foi " + chute + ", e ele era maior que " + numeroPensado + ".");
            } else {
                mostra("O número que você pensou foi " + chute + ", e ele era menor que " + numeroPensado + ".");
            }
        tentativas++;
        }
    }
</script>

Onde está o erro, por gentileza? :)

Se eu entendi bem, acho que se colocar isso:

var numeroPensado = sorteia(10);

dentro do loop while resolve, pois se estiver fora do loop a variável vai ficar sempre com o mesmo valor

Opa, boa dica Eduardo. Vou testar aqui. Obrigado!

Não deu certo. Acho que deve ter a ver com o recarregamento da página. Enquanto esta não é recarregada, continua o mesmo valor gerado pelo Math.random.

P.S.: deu certo sim. Valeu amigo! :)