1
resposta

OLÁ. ACHO QUE ENTROU EM LOOPING...

<meta charset="UTF-8">

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

<script>

var segredos = [];

var numeros = +prompt("Quantos números como segredo? ");

var contador = 1;
while(contador <= numeros){
    var numero = Math.round(Math.random()*10);
    var repetiu = false;

    for(var posicao = 0; posicao < numeros; posicao++){
        if(numero == segredos[posicao]){
            contador = contador - 1;
            repetiu = true;
            break;
        }
    }
    if(repetiu = false){
        segredos.push(numero);
        contador++;
    }
}

console.log(segredos);

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

function verifica(){

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

        if(input.value == segredos[posicao]){
            var acertou = "Acertou!!!";
            break;
        } else{
            var acertou = "Errou!!!";
        }
    }
    alert(acertou);
    input.value = "";
    input.focus();
}

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

</script>
1 resposta

Olá. Sim o seu While entrou em loop e encontrei dois motivos. O primeiro é a variável contador dentro desse if.

if(numero == segredos[posicao]){
    contador = contador - 1;
    repetiu = true;
        break;
}

Não é necessário subtrair do contador quando encontrar um numero repetido, então esse if ficaria assim.

if(numero == segredos[posicao]){
    repetiu = true;
        break;
}

E o segundo motivo é o if que vai colocar o numero no array segredos.

if(repetiu = false){
        segredos.push(numero);
        contador++;
    }

É necessário 2 iguais( == ) para o operador ser o de comparação, quando colocado apenas 1 igual ( = ) ele é o operador de atribuição, do jeito que está atualmente ele faz a variável repetiu ter o valor false e retorna para o if o valor false, dessa maneira nunca entrando nesse if. Para funcionar você deve usar o operador de comparação ==

if(repetiu == false){
        segredos.push(numero);
        contador++;
    }

Foi isso que encontrei, espero ter ajudado, qualquer duvida estou a disposição. Abraços.