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

A pagina nao carrega para mostrar o erro

<meta charset="UTF-8">

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

<script>

function verifica(){

    var achou = false;


    for(var posicao = 0; posicao < segredos.length; posicao++) {
        if(input.value == segredos[posicao]){
            alert("voce acertou");
            break;
        }

        else{
            alert("voce errou");
            break;
        }
    }
}

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


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

}

function sorteiaSegredos(quantidade){

    var segredos = [];
    var numero = 1;



    while(numero <= quantidade){

        var achado = false;
        var numeroAchado = sorteia();


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

            if(numeroAchado == segredos[verificou]){

                achado = true;
                        break;
            }
            if(achado == false){

                segredos.push(numeroAchado);
                        numero++;
            }

        }

    }
    return segredos;



}















var segredos = sorteiaSegredos(3);


console.log(segredos)
</script>

sei que ja tem um post igual a este... mas no posto do sujeito em questao.. nao tem resposta, gostaria de saber o porque de estar num loop infinito e como evitar isto.. obrigado

7 respostas

Bom dia, seguinte vamos começar removendo esse break dos ifs, não se usa para ifs, certo! Break é usado para os Whiles. Para Ifs é recomendado return. Veja essas alterações.

<meta charset="UTF-8">

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

<script>

function verifica(){

    var achou = false;


    for(var posicao = 0; posicao < segredos.length; posicao++) {
        if(input.value == segredos[posicao]){
            alert("voce acertou");
            return;
        }

        else{
            alert("voce errou");
            return;
        }
    }
}

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


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

}

function sorteiaSegredos(quantidade){

    var segredos = [];
    var numero = 1;



    while(numero <= quantidade){

        var achado = false;
        var numeroAchado = sorteia();


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

            if(numeroAchado == segredos[verificou]){

                achado = true;
                        return;
            }
            if(achado == false){

                segredos.push(numeroAchado);
                        numero++;
            }

        }

    }
    return segredos;



}















var segredos = sorteiaSegredos(3);


console.log(segredos)
</script>

assim? mas ainda nao funciona...

Olá Jackson, achei um erro no seu código, é o if(achado == false) que está dentro do for, ele tem que estar fora pois você quer checar todo o array antes de executar ele. Segue o código:

<meta charset="UTF-8">

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

<script>
var segredos = sorteiaSegredos(3);

function verifica(){

    var achou = false;


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

        if(input.value == segredos[posicao]){
            alert("voce acertou");
            return;
        }

        else{
            alert("voce errou");
            return;
        }
    }
}

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


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

}

function sorteiaSegredos(quantidade){

    var segredos = [];
    var numero = 1;

    while(numero <= quantidade){

        var achado = false;
        var numeroAchado = sorteia();


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

            if(numeroAchado == segredos[verificou]){

                achado = true;
                break;
            }

        }
        if(achado == false){

            segredos.push(numeroAchado);
            numero++;
        }

    }
    return segredos;

}


console.log(segredos)
</script>
solução!
 for(var verificou = 0; verificou < segredos.length; verificou++){

            if(numeroAchado == segredos[verificou]){

                achado = true;
                        return;
            }
            if(achado == false){

                segredos.push(numeroAchado);
                        numero++;
            }

        }

bom resolvei mais um dos meus dilemas... tirei o if de dentro do for e inverti o numeroAchado com o segredo[ ] e tudo voltou a funcionar...

ps. to ficando bom nisso

tem razao pedro.. pena que eu ja tinha solucionado.

Detalhe não era necessário utilizar outro If um já bastaria se passasse pelo primeiro já seria falso!

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

            if(numeroAchado == segredos[verificou]){

                achado = true;
                break;
            }else{

            segredos.push(numeroAchado);
            numero++;
        }

        }

Carlos assim o programa trava denovo...