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

Por que usamos a var achou na function verifica() do jogo de adivinha da aula 8?

Boa tarde!

Não entendi para que serve a variável achou no código da aula. Como o javascript lê essa variável? Por que a variável é falsa na definição e true dentro do primeiro if? Segue o código todo:

<meta charset="UTF-8">

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

<script>

    var segredos =[1, 5, 8];

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

    function verifica() {

        var achou = false;
        for (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
5 respostas

Pelo que entendi quando ela entra no primeiro IF quer dizer que alguma das opcoes digitadas esta correta entao dentro do IF ele muda a variavel pra True para não entrar mais no if de errado

Oi Juliana, tudo bem?

Então essa variável serve para dizer se ele encontrou ou não o numero do segredo, ele tem o valor de false(falso) para inicializa-lo, e depois no primeiro if ele verifica, se o seu numero digitado é igual a algum dos numeros do segredo, caso for, ele diz que achou, por isso o achou = true; e no break ele para a execução da função pois ele encontrou o numero e diz que você acertou.

Essas variáveis que possuem o valor de false e true, são conhecidas como boolean ou variáveis booleanas que aceitam apenas dois valores: 0 e 1 e as constantes true e false, que trazendo para nosso mundo real, seria um verdadeiro ou falso.

Espera que tenha ficado claro, qualquer coisa estou aqui!

Então, ainda não entendi o motivo de logo no começo a variável 'achou' ser definida como false e depois, dentro do if, ela mudar para true.Ela ser true dentro do primeiro if é a condição para que o break seja "ativado" e o loop pare? Fiz o teste definindo a variável 'achou' como true. Ai quando eu erro o segredo do jogo, não aparece o alert("Você errou!") do segundo if. Não consegui entender porque isso acontece.

solução!

Então imagina que o jogo começa, você ainda não encontrou o valor certo? Por isso ela é inciada como false, vamos ao exemplo:

Seus segredos são:

var segredos =[1, 5, 8]; //ou seja o usuario tem que digitar 1, 5 ou 8 para acertar

Nessa linha você pega o input do usuario:

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

Dentro da função verifica, ele vai procurar se alguns dos numeros do seu array de segredos bate com o que o usuario digitou. A variável achou é definida como false, pois você ainda não executou a lógica para ver se algum dos seus numeros bate com o que foi digitado.

 function verifica() {


        var achou = false; //Nessa linha ele define como false pois o numero não foi encontrado ainda

        //Nesse for ele vai percorrer para cada elemento do seu array de segredos
        for (posicao = 0; posicao < segredos.length; posicao++) {

              //Nesse if ele verifica se o valor do usuario é o mesmo que contem em determinado elemento de seu array
              if(input.value == segredos[posicao]) {

                //Caso os numeros coincidirem, ele vai dizer que você achou e definir o boolean como true pois é verdade, você encontrou
                alert("    Você acertou!! ");
                achou = true;
                break
            }    

                // Caso o numero não bata, o achou ainda vai ser false, pois inicializamos ele lá em cima, então ele irá abrir o alert e mostrar "Você errou"
            if(achou == false){
                alert(" Você errou! ");
            }
        }

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

Quando você colocou true no achou antes do for, ele nao entrou no primeiro if, pois provavelmente os numeros eram diferentes e no segundo if, o valor de achou era true que não é igual a false, então por isso ele não printou o "Você errou".

Fez sentido?

A variável achou só será true se o usuário tiver acertado o número em segredo – que nesse exemplo é 1, 5 ou 8 –, então o programa exibirá a mensagem informando que ele acertou. Com isso, o programa não entrará no segundo if – que é responsável por informar ao usuário que ele errou –, já que a variável achou agora é true.

Se o usuário erra, o programa ignorará o primeiro if, e a variável achou continuará sendo false, então o programa entrará no segundo if, exibindo a mensagem informando que o usuário errou.

Se você atribui a variável achou como true, ela nunca entrará no segundo if, pois não há nenhuma condição no código para que ela passe de true para false, mesmo que o usuário erre.