Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como posso fazer meu código pegar. É o do botão que sorteia números não repetidos com while e for.

Como posso fazer meu código pegar ? quando vai exibir a página ele carrega infinitamente e não sei porque.

meu código segue abaixo.

<meta charset="utf-8">

<input/>

<button>Compare com meu segredo</button>

<script type="text/javascript">


function sorteia() {


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


}


function sorteiaNumeros(quantidade) {

    var segredos = [];
    var numero = 1;
    while(numero <= quantidade) {


        var numeroAleatorio = sorteia()

        if(segredos !== 0) {
        var achou = false

        for(posicao = 0; posicao < segredos.length; posicao++) {


        if(segredos[posicao] == numeroAleatorio) {

                    achou = true;
                    break
                }
                }

            }
        if(achou = false) {

            segredos.push(numeroAleatorio); {
            numero++;


            }
        }



    } return segredos
}




var segredos = sorteiaNumeros(3);

    console.log(segredos);

    var input = document.querySelector("input");
    input.focus();

    function verifica() {

       var achou = false;

       for(var posicao = 0; posicao < segredos.length; posicao++) {

              if(input.value == segredos[posicao]) {

                     alert("Você ACERTOU!");
                     achou = true;
                     break;
              } 
       }

       if(achou == false) {

              alert("Você ERROU!");
       }

       input.value = "";
       input.focus();

    }

    var button = document.querySelector("button");

    button.onclick = verifica;








</script>
1 resposta
solução!

Oi Daniel, tudo certo?

O seu código entrou em um loop infinito por causa dessa verificação:

if(segredos !== 0) {

}

A variável segredos é um array, então seu valor nunca será 0. O que pode ser 0 é o tamanho desse array, aí você precisa utilizar a propriedade length, dessa maneira:

if(segredos.length != 0) {

}

Além disso, você declara a variável achou dentro dessa condição. Mas se ele nunca entrar nessa condição, ele nunca criará essa variável e o loop fica infinito. Você precisa criar essa variável achou fora da condição.

while (numero <= quantidade) {
      var numeroAleatorio = sorteia()
      var achou = false;

      if(segredos.length != 0) {
              // restante do código
      }

      // restante do código
}

E também quando você faz a verificação para saber se achou é falso, você usa um operador de atribuição ( = ), mas na verdade deve-se usar o operador de comparação ( == ), dessa maneira:

if (achou == false) {
      segredos.push(numeroAleatorio); {
             numero++;
      }
}

Portanto, seu código final ficaria assim:

<script type="text/javascript">

    function sorteia() {
        return Math.round(Math.random() * 10)
    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];
        var numero = 1;

        while (numero <= quantidade) {

            var numeroAleatorio = sorteia()

            var achou = false;

            if (segredos.length != 0) {

                for (posicao = 0; posicao < segredos.length; posicao++) {
                    if (segredos[posicao] == numeroAleatorio) {

                        achou = true;
                        break
                    }
                }
            }
            if (achou == false) {
                segredos.push(numeroAleatorio); {
                    numero++;
                }
            }
        }
        return segredos
    }

    var segredos = sorteiaNumeros(3);

    console.log(segredos);

    var input = document.querySelector("input");
    input.focus();

    function verifica() {

        var achou = false;

        for (var posicao = 0; posicao < segredos.length; posicao++) {

            if (input.value == segredos[posicao]) {

                alert("Você ACERTOU!");
                achou = true;
                break;
            }
        }

        if (achou == false) {

            alert("Você ERROU!");
        }

        input.value = "";
        input.focus();

    }

    var button = document.querySelector("button");

    button.onclick = verifica;

</script>

Espero ter ajudado, bons estudos =)