2
respostas

Boa noite, ele fica dando loop infinito na linha 26. Não consigo entender o que há de errado. Se alguém conseguir explicar, agradeceria muito!

<meta charset="UTF-8">

<input/>
<button>Compare com o meu segredo</button>

<script> 
     var input = document.querySelector("input")

    function sorteia() {

       return Math.round(Math.random() * 10);
   }

    function sorteiaTudo(quantidade) {

   var chuteCerto = []
   console.log(chuteCerto)
   var numero = 1




     while(numero <= quantidade){

      numeroSorteado = sorteia()  ;
      console.log(numeroSorteado);
      var achou = false;



        for(var posicao = 0; posicao < chuteCerto.length; posicao++){
          if(chuteCerto[posicao]==numeroSorteado){
          achou = true;
          break; 

          }

            if(achou==false){
            chuteCerto.push(numeroSorteado);
            numero++;

            }

        }

      }
      return chuteCerto;
        console.log(chuteCerto)
    }  




function verifica() {

    var achou = false
    var chuteCert = sorteiaTudo(4)
    for(var posicao = 0; posicao < chuteCert.length; posicao++){
        if(input.value==chuteCert[posicao]){
        alert("Você acertou!");
        achou = true;
        break;        

        }
          if(achou == false){
        alert("Você errou!");

          }
    }
} 
    var button = document.querySelector("button")
    button.onclick = verifica
  </script>
2 respostas

Olá, Hugo. Tudo bem?

Repare que neste trecho

for(var posicao = 0; posicao < chuteCerto.length; posicao++){
          if(chuteCerto[posicao]==numeroSorteado){
          achou = true;
          break; 

          }

          if(achou==false){
            chuteCerto.push(numeroSorteado);
            numero++;

          }

}

Você colocou o segundo if dentro do for também, mas só o primeiro deveria estar, pois o segundo é executado depois do for para somar a variável numero, que é o contador do seu while while(numero <= quantidade). Então da forma que está, a variável numero nunca é incrementada a condição para sair do loop nunca é alcançada.

Se você retirar o segundo if de dentro do for, acredito que o loop infinito pare de acontecer:

for(var posicao = 0; posicao < chuteCerto.length; posicao++){
    if(chuteCerto[posicao]==numeroSorteado){
        achou = true;
        break; 
    }
}

if(achou==false){
    chuteCerto.push(numeroSorteado);
    numero++;
}

Espero ter ajudado.