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

Estou com dúvida no curso de Lógica de Programação, no exercício 1 do capítulo Desafio final.

Boa noite pessoal,

No desafio perdi muito tempo tentando comparar os dois arrays. Vou postar meu código.

<meta charset="UTF-8">

<input type="text" id="numero0" /> <br />
<input type="text" id="numero1" /> <br />
<input type="text" id="numero2" /> <br />
<input type="text" id="numero3" /> <br />
<input type="text" id="numero4" /> <br />
<input type="text" id="numero5" /> <br />
<input type="submit" value="Adicione e verifique no Bingo!" id="verificar"/>
<input type="submit" value="Fazer jogo!" id="fazJogo" />

<script>
    var sorteio = [];
    var meuJogo = [];
    var acertos = [];
    var erros = [];
    var j = 0;
    for(var i = 0; i < 6; i++){
        sorteio.push(Math.round(Math.random() * 60))
    }
    console.log(sorteio);

    var verificarAcertos = function(){
        if(meuJogo.length == 0){
            alert("Por favor, preencha os campos e clique no botão FAZER JOGO!");
        }else{
            for(var i = 0; i < sorteio.length; i++){
                if(sorteio[i] == meuJogo[j]){
                    acertos.push(meuJogo[j]);
                    }else{    
                        erros.push(meuJogo[j]);
                }    
                if(i == 5){
                    i = 0;
                    j++;
                }
                if(j == 6){
                    break;    
                }
            }
        }
        alert("Você acertou os números: " + acertos + "\n" + "E você errou os números: " + erros);

    };

    var numero0 = document.getElementById("numero0");
    var numero1 = document.getElementById("numero1");
    var numero2 = document.getElementById("numero2");
    var numero3 = document.getElementById("numero3");
    var numero4 = document.getElementById("numero4");
    var numero5 = document.getElementById("numero5");



    var fazerJogo = function(){

        meuJogo.push(parseInt(numero0.value));
        meuJogo.push(parseInt(numero1.value));
        meuJogo.push(parseInt(numero2.value));
        meuJogo.push(parseInt(numero3.value));
        meuJogo.push(parseInt(numero4.value));
        meuJogo.push(parseInt(numero5.value));
    console.log(meuJogo);
    };



    var botaoVerificar = document.getElementById("verificar");
    botaoVerificar.onclick = verificarAcertos;

    var botaoFazJogo = document.getElementById("fazJogo");
    botaoFazJogo.onclick = fazerJogo;



</script>

Acima é todo o código, porém minha dúvida refere-se a function verificarAcertos. Implementei de maneira que funcionasse, mas não creio que seja do jeito correto. Se alguém quiser me dar algumas dicas de como eu poderia ter escrito ela para ficar mais clara eu agradeço.

5 respostas

não sou do curso de lógica mas posso ajudar, apenas me diga: (1) o que é pedido que verificarAcertos() realize? e (2) qual o problema com a tua implementação da função?

Para ficar mais claro:

var sorteio = [1,2,3,4,5];
var meuJogo = [5,6,7,8,9];

A function verificarAcertos() deve comparar os dois arrays e verificar se há algum número igual entre eles. Na resposta do professor consta um for dentro do outro. Conforme abaixo:

var quantidadeAcertos = function(jogados, sorteados) {
    var acertos = 0;
    for(i = 0; i < 6; i++) {
        for(j = 0; j < 6; j++) {
            if(jogados[i] === sorteados[j]) {
                acertos++;
            }
        }
    }
    return acertos;
}

Neste caso, ele está passando os arrays como parâmetros e a cada acerto incrementa a variável acertos. Porém, não entendi muito como funciona este for dentro de outro for.

Observe que na minha implementação como foi pensado:

var j=0;
var verificarAcertos = function(){
        //verifica se o array está vazio
        if(meuJogo.length == 0){
            alert("Por favor, preencha os campos e clique no botão FAZER JOGO!");
        }else{
            //varre o array do sorteio
            for(var i = 0; i < sorteio.length; i++){
                //verificar se a posição um do array sorteio é igual a posição um do array meu jogo.
                if(sorteio[i] == meuJogo[j]){
                    acertos.push(meuJogo[j]);
                    }else{    
                        erros.push(meuJogo[j]);
                }
                //quando i for igual a 5 eu zero ele e incremento o j, que refere-se a posição do array meuJogo. Então o for começa de novo e no meu if acima ele varre todo array do sorteio com a posição 2 do array meu Jogo.
                if(i == 5){
                    i = 0;
                    j++;
                }
                if(j == 6){
                    break;    
                }
            }
        }
        alert("Você acertou os números: " + acertos + "\n" + "E você errou os números: " + erros);

    };

Gostaria de uma explicação de como funciona um for dentro de outro laço for, para que eu possa implementar na minha function.

Obrigado.

O for dentro de um for funciona basicamente assim: - lê o primeiro elemento do array meuJogo; - percorre o array sorteio verificando se algum dos elementos desse array é igual ao elemento lido do array meuJogo; - repete a operação para todos os elementos do array meuJogo.

solução!

Tentei fazer a solução com os dois laço for, porém não funcionou. Parece que entra num loop infinito.

Segue meu código completo.

<meta charset="UTF-8">

<input type="text" id="numero0" /> <br />
<input type="text" id="numero1" /> <br />
<input type="text" id="numero2" /> <br />
<input type="text" id="numero3" /> <br />
<input type="text" id="numero4" /> <br />
<input type="text" id="numero5" /> <br />
<input type="submit" value="Adicione e verifique no Bingo!" id="verificar"/>
<input type="submit" value="Fazer jogo!" id="fazJogo" />

<script>
    var sorteio = [];
    var meuJogo = [];
    var acertos = [];
    var erros = [];

    for(var i = 0; i < 6; i++){
        sorteio.push(Math.round(Math.random() * 60))
    }
    console.log(sorteio);

    var verificarAcertos = function(){
        if(meuJogo.length == 0){
            alert("Por favor, preencha os campos e clique no botão FAZER JOGO!");
        }else{
            for(var i = 0; i < sorteio.length; i++){
                for(var j = 0; i < meuJogo.length; j++) {
                    if(sorteio[i] == meuJogo[j]){
                            acertos.push(meuJogo[j]);
                        }else{    
                            erros.push(meuJogo[j]);
                    }
                }
            }
        }

        alert("Você acertou os números: " + acertos + "\n" + "E você errou os números: " + erros);

    };

    var numero0 = document.getElementById("numero0");
    var numero1 = document.getElementById("numero1");
    var numero2 = document.getElementById("numero2");
    var numero3 = document.getElementById("numero3");
    var numero4 = document.getElementById("numero4");
    var numero5 = document.getElementById("numero5");



    var fazerJogo = function(){

        meuJogo.push(parseInt(numero0.value));
        meuJogo.push(parseInt(numero1.value));
        meuJogo.push(parseInt(numero2.value));
        meuJogo.push(parseInt(numero3.value));
        meuJogo.push(parseInt(numero4.value));
        meuJogo.push(parseInt(numero5.value));
    console.log(meuJogo);
    };



    var botaoVerificar = document.getElementById("verificar");
    botaoVerificar.onclick = verificarAcertos;

    var botaoFazJogo = document.getElementById("fazJogo");
    botaoFazJogo.onclick = fazerJogo;



</script>

Resolvido no meu segundo for esta usando a variável i ao invés da variável j.