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

O código confirma como correto apenas o primeiro número do array

Retirei do código original o (input.value = "";) porque achei que o retorno da string vazia poderia ter dado erro. Mas o problema persiste.

A cada novo teste no input o único número que traz resultado correto é o 2 (como demonstrado dentro do array, o primeiro número possível), já todos os demais retornam com erro.

Revisei de acordo com o vídeo e não encontro discrepâncias. Preciso de olhos de outras pessoas aqui pra me ajudar.

    <script>

        var segredos = [2, 4, 6, 8];

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

        function verifica() {

            var achou = false;
            var posicao = 0

            for ( posicao ; posicao < segredos.length ; posicao++) {

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

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

                if (achou == false) {
                    alert("Você errou");
                    break;
                }                

            }

        }

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


        button.onclick = verifica;


    </script>
3 respostas
solução!

Faça a seguinte alteração:

for ( posicao ; posicao < segredos.length ; posicao++) {

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

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

if (achou == false) {
    alert("Você errou");
}

O motivo pelo qual este erro acontecia é porque assim que o primeiro número fosse testado, se o input não fosse 2, o programa alertava o erro e saía do for por causa do break

Sim, verdade. Retirando o break do false funcionou. Ainda é estranho que o programa não rode como o da aula, enfim. Vou retomar em outro arquivo

Obrigado, William

Daniel o problema é o Break mesmo e isso é esperado.

Quando você escreveu para ativar o BREAK se o primeiro input fosse errado você simplesmente matou todo o loop.

Você não quer que o programa pare o loop se a primeira opção foi a errada.

E outra: O seu "achou==false" ta dentro do loop do "for" quando na verdade deveria estar na function, só depois de rodar o loop inteiro do "for" que o programa deveria informar se algo deu errado.

Nesse seu caso ele verifica se algo deu errado antes de ter terminado e isso que da problema com as varreduras seguintes.