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

Frases de uma repetição exibidas todas de uma vez

Pessoal, não sei se é algo com o navegador, estou na função de adivinhar números, fiz um laço de repetição para ver se acertei ou errei. A verificação acontece sem problemas.

Se eu acerto, devido ao break a mensagem de acerto é exibida, mas se eu erro, o programa me pede um novo número, porém, não informa se errei ou acertei. Somente quando eu erro as 3 vezes, ou acerto uma depois é que a mensagem é exibida.

Então acaba que, em caso de erro no chute, o programa me pede 3 vezes um número e acaba exibindo numa paulada só, meu código segue abaixo:

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

    var numero = sorteia(10);
    console.log(numero); // uso para saber o número sorteado, facilitando o teste

    for(var tentativa = 1 ; tentativa <= 3 ; tentativa++) {
        var chute = parseInt(prompt("Digite seu chute."));
        if(chute == numero) {
            mostra("Você acertou.");
            break;
        } else if(chute > numero){
            mostra("Você errou, seu chute é maior do que o número pensado.");
        } else {
            mostra("Você errou, seu chute é menor do que o número pensado.");
        }
    }

</script>

Estou usando a última versão do Chrome

3 respostas
solução!

Olá,

Isso acontece porque o javascript é considerado um recurso blocante para o navegador.

Imagina só se durante a execução do código javascript o programador ficasse manipulando muitas coisas do document: adicionando ou removendo elementos, mudando valores, tamanho, estilo css, etc... o navegador não ia dar conta de processar e atualizar tudo isso na tela a medida que está sendo alterado durante a execução.

Por isso o navegador somente vai renderizar o conteúdo do documento na tela depois que ele terminar de executar todo o seu código javascript, que nesse caso, é depois que sair do for.

Um alternativa simples é substituir o método mostra(que escreve no document), pela função alert(uma função de popup semelhante ao prompt):

if(chute == numero) {
    alert("Você acertou.");
    break;
} else if(chute > numero){
    alert("Você errou, seu chute é maior do que o número pensado.");
} else {
    alert("Você errou, seu chute é menor do que o número pensado.");
}

Espero ter ajudado.

Ajudou sim Diego, suspeitava que fosse algo do gênero, mas na net não encontrei uma resposta clara como a sua.

Muito obrigado

Eita errei ao marcar a solução...