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

Navegador em looping

A ideia é um incremento da aula 08, atividade 01 do curso de lógica de programação

Minha intenção foi criar um jogo que rodasse em 3 tentativas e que aguardasse a chamada do botão HTML, mas ao abrir um Chrome, a aplicação está em looping no sorteia, antes de chamar a função verifica. Já tentei jogar a chamada do sorteia pra dentro do verifica, para serem executados juntos quando o botão for clicado, mas não resolveu

<meta charset="UTF-8">
<input>
<button>Chutar!</button>

<script>

    function sorteia(n){
    return Math.round(Math.random()* n);
}
    function verifica(){
    if (input.value > segredo) {
        alert("Você errou, que pena! seu chute foi " + input.value + " e foi maior que o que eu pensei, que era " + segredo + ". Vou pensar novamente e a gente tenta de novo! :D");
        return tentativa++;
    } 
    if (input.value < segredo) {
        alert("Você errou, que pena! seu chute foi " + input.value + " e foi menor que o que eu pensei, que era " + segredo + ". Vou pensar novamente e a gente tenta de novo! :D");
        return tentativa++;
    }
    if(input.value == segredo){
        alert("Você acertou o número pensado.");
        return tentativa = 4;
    } 
    }

    var tentativa = 1;
    while(tentativa<=3){

    var segredo = sorteia(10);
    console.log(segredo);
    var input = document.querySelector("input");
    var button = document.querySelector("button");
    button.onclick = verifica;
    }
</script>
4 respostas

Boa tarde Guilherme,

Seu while não tem um incrementador, sem alterar o valor da variável tentativa o loop nunca vai acabar, pois ele sempre vai ser menor ou igual a 3.

Tente com essa alteração.

   var tentativa = 1;
    while(tentativa<=3){

    var segredo = sorteia(10);
    console.log(segredo);
    var input = document.querySelector("input");
    var button = document.querySelector("button");
    button.onclick = verifica;
    tentativa = tentativa + 1; //incrementa a variavel tentativa
    }

Abraços

Vinícius, o incrementador da variável Tentativa está em cada um dos IF's, dentro da função Verifica, já que diferentes respostas, tem diferentes resultados Será que se jogar esse incremento como return resolve??

O problema é que o seu while entra em loop infinito antes de você conseguir colocar qualquer valor dentro input. Pense na lógica do programa e tente substituir o input por um prompt dentro do while.

Enquanto isso vou tentar corrigir o programa e trago uma solução em breve.

solução!

Seguem duas soluções:

Usando o while e prompt:

<meta charset="UTF-8">
<input>
<button>Chutar!</button>

<script>
        var tentativa = 1;
    function sorteia(n){
    return Math.round(Math.random()* n);
}
    function verifica(){
    if (input  > segredo) {
        alert("Você errou, que pena! seu chute foi " + input + " e foi maior que o que eu pensei, que era " + segredo + ". Vou pensar novamente e a gente tenta de novo! :D");
        tentativa++;
    } 
    if (input < segredo) {
        alert("Você errou, que pena! seu chute foi " + input + " e foi menor que o que eu pensei, que era " + segredo + ". Vou pensar novamente e a gente tenta de novo! :D");
        tentativa++;
    }
    if(input == segredo){
        alert("Você acertou o número pensado.");
        tentativa = 4;
    } 
    }


    while(tentativa<=3){

    var segredo = sorteia(10);
    console.log(segredo);
    var input = parseInt(prompt("Qual o seu chute"));
    var button = document.querySelector("button");
    verifica();
    }
</script>

Sem o while usando o input:

<meta charset="UTF-8">
<input>
<button>Chutar!</button>

<script>
        var tentativa = 1;
    function sorteia(n){
    return Math.round(Math.random()* n);
}
    function verifica(){
      if (tentativa <= 4) {
        if (input.value > segredo) {
            alert("Você errou, que pena! seu chute foi " + input.value + " e foi maior que o que eu pensei, que era " + segredo + ". Vou pensar novamente e a gente tenta de novo! :D");
           tentativa++;
        } 
        if (input.value < segredo) {
            alert("Você errou, que pena! seu chute foi " + input.value + " e foi menor que o que eu pensei, que era " + segredo + ". Vou pensar novamente e a gente tenta de novo! :D");
            tentativa++;
        }
        if(input.value == segredo){
            alert("Você acertou o número pensado. Reiniciando o Jogo");
            tentativa = 1;
        } 
      } else {
              alert("Suas tentativas acabaram! Reiniciando o Jogo");
          tentativa = 1;
      }
    }




    var segredo = sorteia(10);
    console.log(segredo);
    var input = document.querySelector("input");
    var button = document.querySelector("button");
    button.onclick = verifica;
</script>

Abraços