Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Por quê meu código não funciona?

Meu código inicia, mas quando coloco a primeira tentativa ele entra em loop infinito e trava o navegador, onde está o erro?

7 respostas
<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);

    }

    alert("Olá! Seja bem vindo ao meu jogo de adivinhação. Estou pensando em um número agora...");

    var numeroPensado = sorteia(10);
    console.log(numeroPensado);
    var chute = parseInt(prompt("Já pensei! Qual número você acha que é? De 0 a 10"));
    var tentativas = 1;

    while(tentativas<=3) {

        if (chute == numeroPensado) {

            mostra("UAU! Você acertou! Parabéns!!!");
            break;

        } else {

                if (chute < numeroPensado) {

                    mostra("Você errou! O número que eu pensei foi menor que esse!");

                }    else {

                        mostra("Você errou! O número que eu pensei foi maior que esse!");
                    }
                }
            }

</script>

Olá Allan, tudo certo?

O código entra em loop infinito pq você não incrementa as tentativas, portanto as tentativas sempre serão menores que 3.

Deu pra entender? Espero que sim! :)

Bons estudos

    while(tentativas<=3) {

        if (chute == numeroPensado) {

            mostra("UAU! Você acertou! Parabéns!!!");
            break;

        } else {

                if (chute < numeroPensado) {

                    mostra("Você errou! O número que eu pensei foi menor que esse!");

                }    else {

                        mostra("Você errou! O número que eu pensei foi maior que esse!");
                    }
                }tentativas++;
            }

Olá, Allan! Tudo bem? Muito bem observado a explicação do Diego. Outro detalhe: A sua variável "chute" pode ser colocada dentro do "While" para que você consiga fazer suas três tentativas. Com ela fora você pode ver que um erro imprime três tentativas de erro. Justamente por estar fora do "While". Um outro ponto que eu corrigiria seria somente as trocas de duas palavras dentro das Strings no "Else", no primeiro "mostra" trocaria a palavra "menor" por "maior" e no segundo "mostra" (segundo else), a palavra "maior" pela "menor". Verá que fará mais sentido quando errar as alternativas. Segue abaixo:

 while(tentativas<=3) {    

        var chute = parseInt(prompt("Já pensei! Qual número você acha que é? De 0 a 10"));    

        if (chute == numeroPensado) {

            mostra("UAU! Você acertou! Parabéns!!!");

            break;

        } else {

                if (chute < numeroPensado) {

                    mostra("Você errou! O número que eu pensei foi maior que esse!");

                } else {

                    mostra("Você errou! O número que eu pensei foi menor que esse!");
                    }


                }

                tentativas ++
            }

Bons estudos e vamos em frente! :)

Deu certo em partes! Agora o código roda, porém o mostra só aparece no final, se eu errar a tentativa ele abre a janela e pergunta novamente, mas no html ele não mostra nada, só mostra quando finalizada as 3 tentativas ou com o acerto, aí aparece tudo de uma vez...

solução!

É isso mesmo, Allan!

Vamos melhorar um pouco mais!!!

O código até o primeiro "if" dentro do "while" vamos deixar como está:

while(tentativas<=3) {    

        var chute = parseInt(prompt("Já pensei! Qual número você acha que é? De 0 a 10")); 


        if (chute == numeroPensado) {

            mostra("UAU! Você acertou! Parabéns!!!");    

            break;
}

Dentro do primeiro "if" depois do "else" podemos colocar um "alert":

}  else {
                if (chute < numeroPensado) {
                alert("Você errou! O número que eu pensei foi maior que esse!");
                }

Perceba que agora, quando seu chute for menor exibirá essa mensagem.

O mesmo vamos fazer quando você chutar um número maior:

} else {
         (chute > numeroPensado)
                        alert("Você errou! O número que eu pensei foi menor que esse!");
                    }  

O "tentativas++" permanecerá onde está para que não entre em loop infinito e podemos colocar um "mostra" fora do "while" para dizer que o jogo acabou:

tentativas ++
            }

    }

    mostra("Nos vemos numa próxima!!!")

O código completo ficará assim:

<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);

    }

    alert("Olá! Seja bem vindo ao meu jogo de adivinhação. Estou pensando em um número agora...");

    var numeroPensado = sorteia(10);
    console.log(numeroPensado);

    var tentativas = 1;


    while(tentativas<=3) {    

        var chute = parseInt(prompt("Já pensei! Qual número você acha que é? De 0 a 10")); 


        if (chute == numeroPensado) {

            mostra("UAU! Você acertou! Parabéns!!!");

            break;

        }  else {
                if (chute < numeroPensado) {
                alert("Você errou! O número que eu pensei foi maior que esse!");
                } else {
                    (chute > numeroPensado)
                        alert("Você errou! O número que eu pensei foi menor que esse!");
                    }          

                tentativas ++
            }

    }

    mostra("Nos vemos numa próxima!!!")


</script>

Espero ter ajudado, Allan!!!

Bons estudos e conte conosco!!!

Vamos em frente!!! \o/

Muito obrigado Cássio e Diego!