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

Dúvida sobre o loop

Acho que eu to deixando algum detalhe escapar. A minha dúvida é: se o loop só executa a condição if dentro dele, e if só é válida se o input.value == segredos[posicao], uma vez que o usuário pode errar o número, por que a função segue direto para o próximo if fora do loop e exibe o alert("Você errou!"), ao invés de retornar para o loop?

4 respostas

Bruna, Tudo bem?

Ideal que você coloque o código aqui para verificarmos juntos.

Esqueci. Desculpa. x)

<meta charset="UTF-8">

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

<script>

    var segredos = [5,7,10,2,3];

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

Bruna,

O código tá certinho, fazendo o que tem que ser feito.

Ele verifica no array 'segredos' se o número digitado no input está lá, e se sim ele dá o alerta que acertou e 'break'..para o loop.

O que ocorre é que o loop for é realizado tão rapidamente que dá a impressão que a aplicação não passa por ele até chegar no if que verifica se o 'achou' é false.

Você consegue adicionar um break point no for e rodar o código no modo debug... Assim você verá cada passa do seu código sendo executado de forma individual.

É isto... se voce colocar o número 1 e pedir para verificar... seu loop for faz 5 verificações na lista, comprando o numero 1 com cada posição do array, não vai ser igual, então o bloco abaixo não será executado.

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

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

Ele vai sair do loop for e vai cair ainda dentro da função verifica e lá ainda existe um if que será executado. Como o 'achou' ainda será false, o bloco será executado informando que o usuário errou o número.

        if (achou == false) {

            alert("Você ERROU!");
        }

Espero ter ajudado.

Se ficou alguma dúvida, por favor informa.

Eraldo, entendi. Muito obrigada!