1
resposta

os numeros sorteados param de ser gerados se houver repetição

Pedi para o codigo gerar 9 numeros aleatorios sem repetir nenhum, no entanto, as vezes ele só gera 5 ou 6, acredito que seja pq ele pare de gerar quando encontra um número repetido. Alguem tem alguma ideia do pq isso esta acontecendo? Segue imagem para ilustrar:

Imagem mostrando erro, onde somente 6 numeros foram gerados, mesmo sendo solicitados 9 numeros

Segue abaixo o código:

<meta charset="UTF-8">
<input/>
<button>Compare com o meu segredo</button>
<script>

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

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

        var numeroAleatorio = sort();

    if(numeroAleatorio !== 0){
            var achou = false;

            for (var posicao = 0; posicao < segredos.length; posicao++){
                if(segredos[posicao] == numeroAleatorio){
                    achou = true;
                    break;
                }
            }
            if(achou == false) {
                segredos.push(numeroAleatorio);
            }
            numero++
        }
    }

    console.log(segredos)
    return segredos;
}


    var segredos = sorteiaNumeros(9);

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

    function verifica(){

        var encontrou = false;

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

            alert("Você acertou!")
            encontrou = true;
            break;
         }
        }

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


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

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

</script>
1 resposta

Boa tarde, o que está acontecendo no seu código é que no momento que você verifica se existe repetição ou não está sempre computando o número sorteado. Com isso, se o número sorteado for repetido o programa não vai inserir no array, mas contará como mais um número sorteado e dessa forma, a cada número repetido, diminuirá os números apresentados.

Para corrigir isso, precisamos colocar o indexador dentro da condição if (achou == false). Assim só será incrementado mais um número se o sorteado for colocado no array.

Colocarei apenas o trecho a ser corrigido:

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