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

Dúvida no ex: ''Armazenando muitos dados''

No final desse exercício não consegui compreender a necessidade da var achou ser true ou falsa, não teria como utilizar o else ao invés de declarar ela false? Obrigado

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

O laço for está varrendo o array "segredos" posição por posição procurando o mesmo valor inserido pelo usúario "input.value". Então vejamos o que acontece se trocar o achou por if e else:

for(var posicao = 0; posicao < segredos.length; posicao++) {
        if(input.value == segredos[posicao]) {
            alert("Você ACERTOU!");
            break;
        } else {
            alert("Você ERROU!");
        }
    }

Os valores de segredos são 5,7,10,2,3, certo? Se eu insirir o valor 10, eu acertei um dos valores, sendo assim a mensagem que deve aparecer na tela é "Você ACERTOU!", porém ao verificar a condição "if" pela primeira vez, o programa verá que não é verdadeira, pois input.value é 10 e o primeiro valor do array é 5, então vai mostrar "else" já que não é verdadeira. O que vai aparecer para mim mesmo tendo acertado um dos segredos? "Você ERROU!", "Você ERROU!", "Você ACERTOU!", aí vai sair do laço com break, mas que programa bipolar, não? Agora perceba que o seu código inicia com "achou" sendo "false", o laço vai percorrer o array inteiro até encontrar o mesmo valor, se não encontrar, a variável permanece sendo false, aí após sair do laço exibirá "Você ERROU!", caso dentro do laço o valor do input.value fosse igual, achou passaria a ser "true", e a condição "if" de fora não seria executada.

 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!");
    }

obrigado gabriel!