2
respostas

Dúvida Desafio Final Lógica de Programação I com JavaScript

Olá, gostaria de saber qual o problema com o meu código abaixo. Duas perguntas em si: Por que está "pulando" direto para os alertas e os sorteios randômicos antes de dar a opção de o usuário jogar os seus números? E mesmo eu jogando após, ele está me dando permissão de jogar mais do que 6 números mesmo eu tendo limitado o tamanho do array. Obrigado desde já.

<meta charset="UTF-8">

<input type="text" id="numero" />
<input type="submit" value="Diga os 6 números que jogará" id="verificar" />

<script>
var pulalina = function() {
    document.write("<br><hr><br>");
}
var mostra = function(frase) {
    document.write(frase);
    pulalina();
};

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

    }
    return acertos;
}

var jogados = [];

var adicionarJogado = function() {
    var numero = document.getElementById("numero").value

    for(var i = 0; i < 6; i++) {
        if(jogados[i] == numero) {
            alert("Número já jogado!");
            return;
        }
    }
    jogados.push(numero);
    console.log(numero);
}

var botao = document.getElementById("verificar");
botao.onclick = adicionarJogado

alert("Muito bom! Agora vou sortear os números premiados. Clique em OK pra eu fazer o sorteio.");
var sorteados = [];
for(i = 0; i < 6; i++) {
    sorteados[i] = (Math.round(Math.random() * 59) + 1);
}

var acertos = quantidadeAcertos(jogados, sorteados);

mostra("Você jogou os números " + jogados);
mostra("Os números sorteados foram " + sorteados);
mostra("Você acertou " + acertos + " número(s)");

</script>
2 respostas

Olá Hélio,

Um dos problemas, pelo que vi, os alerts não estão dentro de nenhuma função então quando o script é lido o alert é chamado.

Aguarde por mais respostas.

Att,

Hélio,

1a pergunta: Como o Ramon disse, o código vai sendo lido (interpretado) pelo navegador e executado em sequencia. O que está dentro de funções só vai ser executado quando a função for chamada. no seu caso o trecho final deve ficar dentro de uma função e essa só deve ser chamada quando você adicionar o sexto numero.

2 pergunta O array é dinamico e você não o limitou. No for o que vocês disse é que ele vai procurar se tem numero repetido da posição 0 a 5

    for(var i = 0; i < 6; i++) {
        if(jogados[i] == numero) {
            alert("Número já jogado!");
            return;
        }
    }

Para resolver seu problema adicionei um if para ver se já foram inseridos 6 numero no array.

    if(jogados.length == 6){
       f();
    }

Caso adicionado o sexto numero eu chamo a função que falamos na pergunta 1. Seu código modificado esta abaixo.

Espero ter ajudado ...


<html>
<head>
<meta charset="UTF-8">
</head>
<body>

<input type="text" id="numero" />
<input type="submit" value="Diga os 6 números que jogará" id="verificar" />

<script>
var pulalina = function() {
    document.write("<br><hr><br>");
}
var mostra = function(frase) {
    document.write(frase);
    pulalina();
};

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

    }
    return acertos;
}

var jogados = [];

var adicionarJogado = function() {
    var numero = document.getElementById("numero").value

    for(var i = 0; i < 6; i++) {
        if(jogados[i] == numero) {
            alert("Número já jogado!");
            return;
        }
    }
    jogados.push(numero);
    console.log(numero);
    console.log(jogados.length);
    if(jogados.length == 6){
       f();
    }
}

var botao = document.getElementById("verificar");
botao.onclick = adicionarJogado;

var f = function() {
alert("Muito bom! Agora vou sortear os números premiados. Clique em OK pra eu fazer o sorteio.");
var sorteados = [];
for(i = 0; i < 6; i++) {
    sorteados[i] = (Math.round(Math.random() * 59) + 1);
}

var acertos = quantidadeAcertos(jogados, sorteados);

mostra("Você jogou os números " + jogados);
mostra("Os números sorteados foram " + sorteados);
mostra("Você acertou " + acertos + " número(s)");
}
</script>
</body>
</html>

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software