8
respostas

Dúvida no While

Adaptei o código do programa pra adivinhar o número para nas tentativas ele informar se o número chutado é maior ou menor do que o número escolhido. E em seguida ele tornar a perguntar. Acontece é que ele não mostra a cada entrada do número, só quando eu coloco o último número ele mostras as três frases. Quando eu substituí a função "mostra" por "alert", ele exibe a condição a cada entrada.. Coloco abaixo o código pra vcs me informarem o que fiz de errado.

===================================

Jogo da Adivinhacao

8 respostas

Marcus,

Não apareceu o seu código. Teria como mandar novamente?

Abraço.

Marcus corrija sua postagem para que o código possa ser visualizado para então podermos lhe ajudar.

<script>
    var pulaLinha = function() {
        document.write("<br><hr><br>");
    }

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

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

var numeroDeTentativas = 1;

while(numeroDeTentativas <=3) {
    var chute = parseInt(prompt("Ja pensei. Qual voce acha que e?"));
    if(chute == numeroPensado) {
            mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
        break;
    } else if(chute > numeroPensado) {
        mostra("Voce errou! Eu tinha pensado num numero MENOR tente novamente");
        } else {
            mostra("Voce errou! Eu tinha pensado num numero MAIOR tente novamente");
        }
    numeroDeTentativas++;
}
mostra("Eu pensei no " + numeroPensado);

</script>

Marcus,

você está pegando o documento e imprimindo nele

document.write(frase);

Essa mensagem vai ser impressa no body da página. Testei aqui e está funcionando, a mensagem é printada no body do documento. Entretanto, as mensagens ficam em segundo plano.

Desculpe Manoel, não compreendi onde está o erro. Eu gostaria que a cada tentativa ele mostrasse se eu havia acertado o número ou se ele era maior ou menor. E qdo eu rodo só mostra as três frase juntas no final. Qdo eu substituo a função "mostra" pelo comando "alert" ele mostra uma por vez na caixa de alerta...

Marcus,

Pelo que entendi lendo na documentação do método write é que ele não pega o texto e joga diretamente na página, ele vai adicionando esse texto no Stream do document, que é impresso na tela quando o document é carregado.

https://developer.mozilla.org/pt-BR/docs/Web/API/Document/write

Fiz o teste aqui utilizando seu código e ocorre exatamente como você descreveu. Outra abordagem que utilizei foi colocar o while dentro de uma função e chamar no onload do documento, só que dai fica pior ainda, porque a cada document.write que você faz, ele limpa o que tem na página e escreve o que você passou no write, ignorando o que já existia.

Para fazer isso que você está querendo fazer penso que deveria utilizar outra abordagem, algo mais avançado, talvez utilizando JQuery.

Entendo que as respostas anteriores e essa minha não eram exatamente o que você queria mas realmente com o document.write não vai dar.

Bons estudos pra você. Abraço.

Ele vai imprimindo no body da página, Marcus. Aqui no firefox seu código funciona. A cada tentativa, ele imprime no corpo da página as mensagens corretamente, só que a tela fica travada pela função que tá perguntando o número, como se essa janela de pergunta fosse um modal, que trava a tela até ser fechada. Mas a cada vez que entro com um número, a mensagem é impressa no corpo da página.

A vantagem do uso de funções é que facilita a alteração:

<script>
    var pulaLinha = function() {
        document.write("<br><hr><br>");
    }

    var mostra = function(frase) {
        alert(frase);
    };

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

var numeroDeTentativas = 1;

while(numeroDeTentativas <=3) {
    var chute = parseInt(prompt("Ja pensei. Qual voce acha que e?"));
    if(chute == numeroPensado) {
            mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
        break;
    } else if(chute > numeroPensado) {
        mostra("Voce errou! Eu tinha pensado num numero MENOR tente novamente");
        } else {
            mostra("Voce errou! Eu tinha pensado num numero MAIOR tente novamente");
        }
    numeroDeTentativas++;
}
mostra("Eu pensei no " + numeroPensado);

</script>