1
resposta

Não consigo comparar dois arrays

Olá,

Pessoal, consegui realizar o que o último exercício pedia, que era colocar mais chances pro usuário e sortear números aleatórios que não se repetem e não são 0.

Mas agora, na função verificaChutes, eu não consigo eliminar os IFS, porque tenho 2 listas, a lista "listaChutes" e a "numeroPensado", não consigo fazer o loop de alguma forma que compare o primeiro chute com o primeiro número, o segundo chute com o segundo número e assim por diante.

Segue código:

<meta charset="UTF-8">

<script>

    function mostra (frase) {

        document.write(frase);
        pulaLinha();
    }

    function pulaLinha() {
        document.write("<br><br>")
    }

    function sorteia () {
       return Math.round(Math.random() * 10);

    }

    function listaSegredos (quantidade) {

        var segredos = [];
        var contador = 1; 

        while (contador <= quantidade) {

           var numeroAleatorio = sorteia ();

           if (numeroAleatorio !== 0) {

                var achou = false;
                for (var posicao = 0; posicao < segredos.length; posicao++) {
                    if(segredos[posicao] == numeroAleatorio) {
                        achou = true;
                        break;
                    }
                }

                if (achou == false) {

                segredos.push(numeroAleatorio);
                contador++;

                }

            }

        }

        return segredos;
    }

 // 

    var numeroPensado = listaSegredos(3);

    console.log(numeroPensado);

    alert("Tente acertar três números premiados de 0 a 10");

    function adicionaChutes () {

        var listaChutes = []

        var chutes = 3

        var contador = 1;

        while (contador <= chutes) {

            var chute = parseInt(prompt("Chute " + contador))

            listaChutes.push (chute);

            contador++;    

        } 

        return listaChutes;

    }

    var listaChutes = adicionaChutes();

    function verificaChutes () { // é aqui o problema, eu tive que colocar um IF para cada chute e cada número sorteado, está funcionando, mas quero eliminar os IFS e utilizar alguma forma de loop

        if (listaChutes[0] == numeroPensado[0]) {

            mostra("Parabéns, você acertou o primeiro número!");
        } else {
            mostra ("Que pena, você errou o primeiro número!")
        }

        if (listaChutes[1] == numeroPensado[1]) {

            mostra("Parabéns, você acertou o segundo número!");
        } else {
            mostra ("Que pena, você errou o segundo número!")
        }

        if (listaChutes[2] == numeroPensado[2]) {

            mostra("Parabéns, você acertou o terceiro número!");
        } else {
            mostra ("Que pena, você errou o terceiro número!")
        }
    }

    alert ("Mostrar resultado");

    verificaChutes();

    mostra("FIM");


</script>

Já tentei usar o while e for mas estou confuso, não tô conseguindo passar disso.

1 resposta

Fala! Matheus, tudo bem ?

Peço desculpas pela demora em te dar uma resposta.

Nesse caso que você quer comparar as mesmas posições entre dois arrays, fica mais fácil de ser feito com um for. Como nós queremos olhar as mesmas posições dos arrays, podemos escolher o tamanho de qualquer um dos dois para a repetição, não vai fazer diferença porque eles vão ter o mesmo tamanho.

Um outro ponto importante é que podemos usar o mesmo iterador para os dois arrays, já que vão ser as mesmas posições. Você pode verificar neste código que você enviou, que os ifs são praticamente iguais, mudando apenas o número dentro dos colchetes, esse é o iterador que vamos utilizar e incrementar dentro do laço de repetição for. Portanto, apenas fazendo essa pequena mudança no seu código, ele ficará da seguinte forma:

 var listaChutes = [1,2,3,4,5]
 var numeroPensado = [5,4,3,2,1]

 var tam = listaChutes.length;

 for(var i =0; i<tam; i++){
   if(listaChutes[i] == numeroPensado[i]){
      alert("Acertou!");
         }
         else{
      alert("Errou!");
   }
 }

Esse nosso código, vai mostrar um alert “acertou” apenas na comparação do número 3. Nas outras ele mostrará um alert “Errou”. Ou seja, nosso código em um mesmo for comparou todas as posições dos dois arrays e para cada comparação emitiu um resultado. Esse código pode ser melhorado ainda mais, adicionando mais ifs, verificando qual o número daquela tentativa, por exemplo:

<script>
 var listaChutes = [1,2,3,4,5]
 var numeroPensado = [5,4,3,2,1]

 var tam = listaChutes.length;

 for(var i =0; i<tam; i++){
   if(listaChutes[i] == numeroPensado[i]){
            alert("Acertou!, a tentativa numero " + (i+1));
      }

      else{
            alert("Errou! a tentativa numero " + (i+1));
      }

 }


</script>

Qualquer dúvida fico à disposição.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!