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

meu código não mostra a mensagem "você errou" após tentativa errada

eu já revisei o código varias vezes e não consegui encontrar onde está o erro, o código do prof. flávio a cada tentativa errada já imprime na tela o erro e meu código está "igual o dele", porém só mostra as mensagem após as 3 tentativas :( se alguém conseguir encontrar onde está o erro eu agradeço pela ajudaaa

<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("Chute um número !"));

    if (chute == numeroPensado) {

        mostra("parabéns, você ACERTOU :D o numero pensado era: " + numeroPensado)
            break;

    } else {

        mostra("você ERROU!");

    }

    tentativas++;
}

mostra("FIM")

</script>
7 respostas

Está faltando ;

  mostra("parabéns, você ACERTOU :D o numero pensado era: " + numeroPensado)
            break;

Josias, testei o seu código aqui e funcionou exatamente como o do prof. Flávio. A cada tentativa errada é exibida mensagem.

Em qual navegador você realizou o teste?

Edit:

Parece um comportamento do navegador mesmo.

Primeiramente usei o Firefox e as mensagens foram aparecendo conforme ia errando.

Depois testei no Chrome, aí aconteceu como você falou, as mensagens só apareceram ao final.

poisé, acabei de baixar o código que ele mesmo fez e tal que fica disponível na aula 8 ! e acontece a mesma coisa que o meu ! estou fazendo no chrome, porém no windows será que é por isso ?

que coisa doida isso, não vou marcar como resolvido por enquanto pra ver se alguém sabe a explicação desse comportamento do chrome no windows beleza ? mais obrigado pela resposta de vocês bros

Olá Josias! Isso ocorre porque o document.write () não é a melhor alternativa para imprimir algo na tela do navegador. Nem todos interpretam essa função da mesma forma. O Chrome tem algumas restrições quanto a ele no Windows e no Linux sim.

Ele é usado aqui no curso pois é a forma mais didática de entendermos a lógica de programação. Mais, no decorrer dos seus estudos aprenderá métodos mais eficientes. Continue os estudos, não fique preso a esta questão técnica, ok?

Para testar se seu código está realmente funcionando do jeito que você pretenda que ele funcione, teste esse mesmo código no Firefox ou altere a função document.write () para a função alert ().

Abraços e sucesso nos estudos!

solução!

Josias, eu uso alert nessa parte. Como você esta em um loop você só verá as mensagens no final do seu programa. A explicação do André explica que há outras formas mais interessantes de se imprimir na tela mas que não se aplicam no curso de lógica por demandar de um Javascript mais avançado. Você aprenderá essas técnicas caso queira se aprofundar nessa linguagem.

Aliás quem sabe não te encontro nos cursos avançados em 2017?

Tudo certo agora? Não é problema de lógica .

Eu percebi que houve o mesmo problema com o Opera.

Eu fiz alguns testes no Chrome, e mesmo mudando a forma do loop, o resultado final era sempre o mesmo, eu tentei While, For e recursividade.

Eu consegui fazer o código funcionar no Chrome, mas, acredito que a solução não seja válida para o escopo do curso. Mas, vou postar para quem quiser se aprofundar mais no tema.

A solução que eu encontrei foi colocar a lógica numa função em separado e executar a cada 3 segundos. Desta forma, o loop continua, mas vai imprimindo na tela a cada etapa. Eu também mudei a forma de imprimir o resultado.

<meta charset="UTF-8">
<div id="mensagem"></div>
<script>

function pulaLinha() {

      document.getElementById("mensagem").innerHTML += "<br><br>";
}

function mostra(frase) {

        document.getElementById("mensagem").innerHTML += frase;
        pulaLinha();
}

function executar_numero(tentativas){
    var chute = parseInt(prompt("Chute um número !"));

    if (chute == numeroPensado) {
        mostra("parabéns, você ACERTOU :D o numero pensado era: " + numeroPensado)
    } else {
        mostra("Você errou");
    }
    tentativas++;
    if (tentativas<=3){
        setTimeout(function(){executar_numero(tentativas)}, 3000);

    } else {
        mostra("FIM");
    }
}

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

var tentativas = 1;
executar_numero(tentativas);
</script>

Neste exemplo eu eliminei o document.write e criei uma DIV com o nome de "mensagem" para receber cada aviso.