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

Mensagem é exibida apenas quando o loop termina

Estou com uma duvida a respeito da aula 04 do curso Lógica de programação I: Os primeiros programas com Javascript e HTML. No exemplo do jogo_advinha.html eu notei que a mensagem Errou é exibida no momento em que o usuario digita algum numero. Porem no meu codigo a mensagem de Erro ou Acerto é exibida apenas quando o while loop termina. Por que acontece isso?

Ja tentei inverter as condicoes do if / else mas continua na mesma.

Este é o meu codigo:

function pulaLinha() {
  document.write("<br>");
  document.write("<br>");
}

function mostra(frase) {
  var paragrafo = document.getElementById('content');
  paragrafo.textContent = 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("Seu chute"));
  if(chute !== numeroPensado) {
    mostra("Errou!");
  } else {
    mostra("Acertou!");
    break;
  }

  tentativas++;
}
8 respostas

Pela minha lógica, tente colocar o "tentativas++" dentro Do if "errou".

  var chute = parseInt(prompt("Seu chute"));
  if(chute !== numeroPensado) {
    mostra("Errou!");
  tentativas++;
  } else {
    mostra("Acertou!");
    break;
  }

}

Assim ele irá acrescentar +1 sempre que errar. Caso acerte, ele quebra o laço. Se não der certo me avise.

Não esqueça de marcar o tópico como solucionado quando finalizar suas dúvidas, assim você também ajuda outras pessoas s2

Oi Nikolai, obrigado pela sugestao, mas nao deu certo. Agora soó exibe 1 vez a mensagem Errou.

E continua sendo exibido apos o loop acabar.

solução!

Pode me mandar o seu código inteiro para eu testar aqui?

Bruno, eu mudei um pouco seu código e tentei aqui. Eu acho meio difícil, mas pode ser a atualização do chrome. Caso queira tentar :

<meta charset="UTF-8">

<script>

    function pulaLinha() {

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

    function mostra(frase) {

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

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

    var tentativas = 1;

    while(tentativas <= 3) {

        var chute = parseInt(prompt("Digite seu chute!"));

        if(chute == numeroPensado) {

            mostra("Você ACERTOU, o número pensado era " + numeroPensado);
            break;

        } else {

            mostra("Você ERROU!");
        }

        tentativas++;
    }

    mostra("FIM");


</script>

Não há erro algum, mas infelizmente eu não sei o por que só é mostrado após finalizar o loop. Como disse, pode ser que seja referente ao próprio navegador.

Valeu Nikolai, eu tambem estou achando que deve ser devido a atualizacao do Chrome. Mas agora é exibido as 3 mensagens no final.

Boa noite Bruno, acho que essa peculiaridade é do chrome, se vc testar em outros navegadores funciona de boa. Estou pesquisando como resolver isso também.

abraços.

Eu tb tive esse problema, e mesmo abrindo no Internet Explorer 9 as mensagens aparecem apenas depois que o loop termina.