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

POSIÇÕES NÃO LIDAS ARRAY

QUANDO É COLOCADO O PRIMEIRO ITEM DO ARRAY ELE DA ACERTO, QUANDO VAI OS DEMAIS ITENS DA COMO ERRADO, MAS VERIFIQUEI EM OUTRAS ENQUETES QUE ERA PRA RETIRAR O INPUT.VALUE=""; DE DENTRO DO FOR POIS ELE LIMPAVA O VALOR, E MESMO FAZER ISSO NÃO CORRIGIU, TENTEI RETIRAR O INPUT.VALUE="" DA FUNCTION MAS TBM NÃO DEU. OBRIGADOOO DESDE JÁ

<!DOCTYPE HTML>

<HTML lang="pt-br">

<head>
    <meta charset="utf-8">
    <title>Alura</title>
</head>

<body>
    <h1>Jogo de Adivinhação com botões</h1>

    <p>vamos fazer um jogo de adivinhação, caso insira o numero no
        campo abaixo e vamos ver se acerta ou erra</p>

    <input />
    <button>ADIVINHAR</button>

    <script>
        function pulaLinha() {
            document.write("<br>");
        }
        function mostra(frase) {
            document.write(frase);
            pulaLinha();
        }

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

        var sorteado = [8, 4, 6];//array 
        //primeira posição de array é 0.

        //array.length = pergunta ao array quantas posições ele tem
        function sorteio() {

            var encontrado = false;

            for (var posicao = 0; posicao < sorteado.length; posicao++) {
                if (input.value == sorteado[posicao]) {
                    mostra('Parabéns. Você acertou!')

                    encontrado = true;//caso acerte o encontrado passa a ser verdadeiro

                    break; //acertando ele para de mostrar erro
                }

                if (encontrado == false) {
                    mostra("Voce erro!!! Azarão");
                    break;
                }
            }
            input.value = "";
            input.focus();
        }

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

        button.onclick = sorteio; //onlick == em um clique

    </script>
</body>

</HTML>
2 respostas

Olá Olga, tudo bom?

Então, acredito que achei a parte do código que está causando o probleminha!

Vamos analisar:

for (var posicao = 0; posicao < sorteado.length; posicao++) {
    if (input.value == sorteado[posicao]) {
        mostra('Parabéns. Você acertou!')

        encontrado = true;//caso acerte o encontrado passa a ser verdadeiro

        break; //acertando ele para de mostrar erro
    }

    if (encontrado == false) {
        mostra("Voce erro!!! Azarão");
        break;
    }
}

Temos um for que irá checar todos os valores do nosso array. E dentro dele, temos duas condições, caso o valor informado seja igual ao que temos na posição atual do array sorteado, será impresso a mensagem de parabéns. Caso contrário, ele entrará no próximo if, e mostra que o usuário errou!

Mas, raciocina comigo, em ambos os casos, temos a instrução break que irá terminar a instrução sem menos antes consultar os demais números do nosso array!

Então, como podemos corrigir isso? É bem simples na verdade. Veja o código a seguir:

for (var posicao = 0; posicao < sorteado.length; posicao++) {
    if (input.value == sorteado[posicao]) {
        encontrado = true; //caso acerte o encontrado passa a ser verdadeiro
        mostra("Parabéns. Você acertou!");
        break; //acertando ele para de mostrar erro
    }
}
if (encontrado === false) {
    mostra("Voce erro!!! Azarão");
}

A variável encontrado inicializa com false, e ela só será true caso o número seja encontrado! Então para que todos os número sejam verificados, deixamos apenas uma condição dentro do for, e caso o encontrado seja true o if (encontrado === false) não será executado e vice versa!

O que estava acontecendo é que if (encontrado === false) estava sendo sempre executado depois que o primeiro não era atendido. E como havia um break, a aplicação simplemente parava e não verificava os demais valores do array sorteado.

Talvez tenha ficado confuso! Mas espero te ajudado de alguma forma. Qualquer coisa estou a disposiçã ^^.

solução!

Muito obrigadooooo, deu certo e entendi tbm, o break faz com que o programa pare de procurar nas outras posições pois foi quebrado o for e deveriamos tirar o if que mostrava erro pois se não ele mostraria todos as outras posições que não foi encontrada. ; )