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

Só recebo a mensagem "Você errou", mesmo acertando. Não encontro erro no código.

Minha dúvida é referente ao exemplo do primeiro vídeo da aula 9, "Armazenando muitos dados".

Já li e reli meu código, coloquei lado a lado ao código apresentado na aula, mas não consigo encontrar o erro. Mesmo que eu inpute um número correto, recebo a mensagem "Você errou". O que eu estou deixando passar?

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

Olá Vitor, tudo bem com você?

O erro está no seu for:

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

Mais especificamente, na palavra "lenght". A forma correta de escrever é "length" terminando com th. Por isso o programa nunca entra no seu for e você nunca vê a mensagem "Você acertou!".

Enfim, não é a toa que você não encontrou. É um problema que pega muita gente, principalmente quando sua lógica está correta!

Inclusive, temos uma atividade nessa mesma aula que aborda esse problema, de tão comum que ele é! rs

Se ficou alguma dúvida é só avisar! Abraços e bons estudos!!

Oi Thiago, muito obrigado pela ajuda, era isso mesmo!

Uma outra duvida: por qual motivo o console não apresenta erro de sintaxe, se a escrita estava errada? Não deveria aparecer?

Opa Vitor, desculpa a demora pelo retorno! Mas vamos lá!!

Então, eu não conheço muito de JavaScript, então não vou saber explicar com detalhes o que está acontecendo por baixo dos panos. Mas, basicamente, quando nós tentamos usar uma propriedade que não existe - como o segredos.lenght (escrita errada) - nos é retornado um valor indefinido (undefined). O que significa que o programa continua rodando, porém a verificação da condição do for fica assim:

for(var posicao = 0; posicao < undefined; posicao++)

E, por consequência, posicao < undefined retorna false e nunca chegamos a executar o código dentro do for.

Se quiser testar isso, coloca a linha document.write(segredos.length); (escrita correta) em algum lugar do seu programa que não seja dentro da função verifica() e abre a página no navegador. Você provavelmente vai encontrar o número 5 impresso em algum lugar da página, mostrando que o tamanho do array segredos é, de fato, 5. Depois disso, altere a palavrinha length para lenght e veja que ao invés do 5, será impresso o valor undefined.

Exemplo com "document.write(segredos.lenght)" no final do código

<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.lenght; 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;

    document.write(segredos.lenght);

</script>

Resultado: valor "undefined" aparecendo depois do botão

Imgur

Fez sentido? Se algum ponto não ficou claro é só avisar! Forte abraço e bons estudos!!