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

Ainda encontro números repetidos no Array

Os números no array ainda repetem. O que pode estar errado?

<meta charset="UTF-8">

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

<script>

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(numeroAleatorio != 0){

         for(var 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>
3 respostas

Você tinha que ter deixado a variável de segredos dentro da função verifica. Dessa forma ele passava uma vez só pelos segredos quando a página carregava. Dá uma olhada :

<meta charset="UTF-8">

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

<script>

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(numeroAleatorio != 0){

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

            if(segredos[posicao] == numeroAleatorio) {

                achou = true;
                break;
            }
         }

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

  }
    return segredos;
}





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

function verifica(){

    var achou = false;
    var segredos = sorteiaNumeros(3);
    console.log(segredos);

    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>
solução!

Boa noite, acho que o erro está no for da funcão sorteiaNumeros, antes das chaves tem um ";", após retirar esse ponto e vírgula, acredito que o código funcione normalmente, evitando de repetir números. Espero ter ajudado.

function sorteiaNumeros(quantidade){

    var segredos = [];

    var numero = 1

    while (numero <= quantidade) {

        var numeroAleatorio = sorteia();

        var achou = false;

        if(numeroAleatorio != 0){

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

            if(segredos[posicao] == numeroAleatorio) {

                achou = true;
                break;
            }
         }

Fiquei mais de uma hora procurando o erro e nunca que eu ia achar esse ";"...