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

Problemas na hora de mostrar a mensagem para o usuário.

As mensagens só são mostradas se o número é acertado ou quando o programa se encerra, as mensagens de erro durante a execução do código não são mostradas..

<meta charset="UTF">

<script type="text/javascript">

    function pulaLinha() {

        document.write("<br>");

    }
    function mostra(frase) {
        document.write(frase);
        pulaLinha();

    }
    function sorteia(n) {

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


    var numeroPensado = sorteia(10);

    var tentativas = 1;

    while( tentativas <= 3){
        var chute = parseInt (prompt("Já pensei em um número, qual você acha que é?? "));

        if(chute == numeroPensado){

            mostra("Uau, você acertou! O número pensado era " + numeroPensado);
            break;

        } else {

            mostra("Você ERROU!");
        }

        tentativas++;

    }
7 respostas

Boa tarde Lucas,

Enquanto o "while" estiver sendo executado, o browser não escreve, pois está ocupado processando o loop. Neste caso, você poderia utilizar a function "alert" no lugar do "mostra", assim as mensagens de erro serão apresentadas na hora.

Obs.: O alert aparecerá durante o processamento do loop porque ele não é relativo ao DOM, já o processo de escrever na tela é.

Pode tentar sem o bloco Else!

if(chute == numeroPensado){

            mostra("Uau, você acertou! O número pensado era " + numeroPensado);
            break;

        }
mostra("Você ERROU!");
tentativas++;
}

Veja um exemplo que funciona!

function escreva(parametro){
            document.write(parametro + "<br>")
        }

        var numPensado = Math.round(Math.random() * 50);

        var tentativas = 1;

        while(tentativas <= 3) {

            var numInserido = parseInt(prompt("Digite um numero de 0 a 50, duvido que você adivinha qual eu estou pensando!"));

            if (numInserido == numPensado) {
            escreva("Caramba!!! É esse mesmo o numero que eu pensei, como você adivinhou???");

            break;

            }  

            alert("Errouuuuuu!");
            tentativas++;

            }

            escreva("O numero pensado era " + numPensado);

Vi em outras postagens que é uma limitação do document.write dentro de um loop. Você só verá a saída no final. Tente com o alert!

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <script>
            function mostra(frase){
                document.write(frase + ("<br/>"))
            }

            var numeroPensado = Math.round(Math.random()*10);

            console.log(numeroPensado);

            var numeroDaTentativa = 1;

            while(numeroDaTentativa <= 3){

                var chute = parseInt(prompt("Qual número acha que é?"));
                if(numeroPensado == chute){
                    mostra("Parabéns, você acertou! Esse foi o número que pensei:" + numeroPensado);
                    break;
                }else{
                alert("Você errou. Será que ainda tem mais tentativas?");
            }
                numeroDaTentativa++;
}
        </script>
    </body>
</html>

Como fiz o meu!!

Boa pessoal!!!

Eu também estou com a mesma dúvida do Lucas, eu até entendo que fazendo as adaptações sugeridas o código funcione, mas por que o Flávio no vídeo não faz nenhuma adaptação e a mensagem é impressa logo após o chute errado?

solução!

Boa noite, pessoal!

Conversando com o Flávio, ele me disse que após a gravação do curso o Google Chrome passou a funcionar da forma como vcs tem visto, ou seja, com o conteúdo do document.write() sendo exibido na tela apenas no final do processamento de todo o código Javascript pq é somente nesse momento final que o Javascript tem garantia de que o DOM está completo e não será alterado.

Aprendizado para a vida:

O document.write() tem suas informações apresentadas apenas no final do processamento do Javascript. Enquanto isso, funções como o alert() e o prompt() aparecem no momento em que são invocadas por não serem ligadas diretamente à construção do DOM.

Grande abraços e bons estudos a todos!