2
respostas

Permanece em loop, como resolver?

<meta charset = UTF-8>

<script>

    function abreEspaço() {document.write("<br><hr>");}
    function aponta(isso) {
        document.write(isso);
        abreEspaço()
    }

    //Fazer uma adivinhação com 3 chutes de um número entre 0 e 10

    while(chuteAtual <= totalChutes) {
        var númeroSelecionado = Math.round(Math.random() * 10);
        var chute = parseInt(prompt("Insira seu chute"));
        var chuteAtual = 1;
        var totalChutes = 3;

        if(chute == númeroSelecionado) {
            aponta("Mandou bem, o número era " + númeroSelecionado);
            chuteAtual = totalChutes
        } 
        else {
            if(chuteAtual == totalChutes) {
                aponta("Não dá pra tu tentar de novo. Era o " + númeroSelecionado);
            }
            else {
            aponta("Pode tentar de novo, tá suave.");
            }
        }
        chuteAtual = chuteAtual++
    }




//incompleto



</script>
2 respostas

Olá Bryan, tudo bem?

Coloque as linhas abaixo fora do laço while:

 var chuteAtual = 1;
 var totalChutes = 3;

Bryan,

para que seu código funcione, tem que mudar algumas coisas que não estão corretas:

chuteAtual = chuteAtual++;

Esta não é a sintaxe correta, está misturado com o conceito de um contador simples. O correto é:

chuteAtual++;

ou

chuteAtual = chuteAtual + 1;

Outro problema que impede o funcionamento é deixar estas 3 atribuições dentro do laço 'while' (coloque-os acima do laço):

var numeroSelecionado = Math.round(Math.random() * 10);
var chuteAtual = 1;
var totalChutes = 3;

Mudando isto, vai ter outro problema: seu código usa alert e document.write. O navegador Firefox vai ler isto sem problemas, na ordem que pensou. Mas as atuais versões do Chrome mostram todos os 'alert' primeiro, e só depois aparecem os 'document.write', independente da ordem que escreveu.

Então, para seu código ficar conciso, recomendo usar o alert em tudo (não vai precisar fazer isso a vida inteira, porque depois pode aprender a programar, entenda que este é só um exercício de lógica de programação, e está aprendendo instruções básicas para isto.

Assim, pode usar somente uma function, a 'aponta', usando 'alert'. Os pulos de linha e a abreEspaco ficam sem sentido neste contexto.

Com isto seu código vai funcionar. Mas tem mais coisas a corrigir, que não afetam seu código hoje, mas que evitarão problemas futuros:

Tenha como boa prática:

  • indentar bem (colocar/tabular os espaços à esquerda de forma adequada). Fica melhor de entender sua idéia e execução;
  • nunca use acentos e cedilhas nos nomes de variável e funções (seu código tem vários casos. Vão te atrapalhar no futuro;
  • coloque sempre ponto e vírgula ao final de uma linha de comando (pode causar problemas);
  • coloque corretamente a tag <meta charset="UTF-8"> Com estas sugestões, seu código ficaria assim:
<meta charset="UTF-8">

<script>

    function aponta(isso){
        alert(isso);
    }

    var numeroSelecionado = Math.round(Math.random() * 10);
    console.log(numeroSelecionado);
    var chuteAtual = 1;
    var totalChutes = 3;

    while(chuteAtual <= totalChutes) {

        var chute = parseInt(prompt("Insira seu chute"));
        if(chute == numeroSelecionado) {

            aponta("Mandou bem, o número era " + numeroSelecionado);
            chuteAtual = totalChutes;
        }else{

            if(chuteAtual == totalChutes) {
                aponta("Não dá pra tu tentar de novo. Era o " + numeroSelecionado);
            }else{

                aponta("Pode tentar de novo, tá suave.");
            }

        }

        chuteAtual++;
    }

</script>

Bons estudos!