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

Aonde errei? O alert fala que está errado não importando se coloco um número do array.

<meta charset="UTF-8">
<input/>
<button>Compare com o meu segredo.</button>
        <script>
                function pulaLinha() { document.write("<br>");}
function mostra(f) { document.write(f); pulaLinha();}
var segredo =[5,2,3,1];

 var input = document.querySelector("input");
function adivinha() { for(var contador =1; contador <=4; contador++) {
                if(input.value == segredo[contador]) { alert("Você acertou, o número era " + segredo +".");}
        else{alert("Você errou.")} input.value="";
        input.focus();}         }
var button = document.querySelector("button");
button.onclick = adivinha;
        </script>

Ele mostra como errado mesmo que eu insira um número do Array. Aonde estou errando?

2 respostas

Lucas, boa noite!

Identifiquei o erro. Abaixo, segue o código comentado:


var input = document.querySelector("input");
var segredo = [5,2,3,1];

function adivinha() { 

 // Fiz a alteração do número 4 para segredo.length, pois caso você queira inserir ou remover outros números o loop (for) não será afetado.
  for(var contador = 0; contador < segredo.length; contador++) {


    if(input.value == segredo[contador]) { 

// Para que não seja exibido todos os valores do array, podemos mostrar o input.value, que será o valor inserido no mundo HTML. Contudo, se preferir, pode utilizar segredo[contador], que obterá o mesmo resultado, porém, no cenário anterior creio que fique mais assertivo.
      console.log("Você acertou, o número era " + input.value +".");

// Dessa forma, após acertar um dos números ele sairá do loop.
      break

    } 
    // removi o else, assim evitará de exibir uma mensagem de erro quando acertarmos o resultado. Por exemplo, digitando o último número do array, era exibido 3 vezes a mensagem de erro e, em seguida, a mensagem de acerto.

  }    

  // Adicionei um if, conforme orientações do professor em aula. Então ao adicionar esse if fora do bloco do for, o cenário esperado é que se o número inserido no input não for localizado no if anterior, ele executará a condição abaixo. Porém, executará apenas se o valor de input.value for diferente dos valores dentro do array.
  if(input.value != segredo[contador]) {
    console.log("Você errou.") 
  }   

 // Identifiquei que mesmo após todas as alterações anteriores o problema persistia. Mesmo digitando um dos números 2, 3 e 1 dava erro. Então percebi que o input.value = ""; estava alterando o valor da variável, como consequência o valor sempre estaria errado. Para resolução do problema, removi a variável de dentro do bloco do loop (for), ou seja, dessa forma, a variável não influenciará o valor dentro do loop.
    input.value="";
    input.focus();

}

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


Obs.: por fim, fiz a indentação do código, pois assim ficou mais fácil de analisar e encontrar a origem do problema.

Espero que esse exemplo tenha lhe ajudado.

solução!

Muito Obrigado, Apolinário.