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

Desafio Final.

Galera, estou há 2 dias nisso e não consigo fazer o código funcionar. O detalhe que falta é não deixar o usuário digitar números repetidos. Aproveito para pedir analise do código como um todo. Muito obrigado, segue abaixo:

<script>

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

var mostra = function (frase){
    document.write(frase);
    pulaLinha();
};

var sortearNumero = function(numerosSorteados){
for(var i = 0; i < 6; i++){
    var numero = 0;
    while(numero == 0) {
     numero = Math.round(Math.random() * 60);
    };
    var numeroValido = true;
    for(var v = 0; v < 6; v++){
        if(numero == numerosSorteados[v]){
            numeroValido = false;
            i = i - 1; //Serve para drecrementar o i e retornar àquela posição do array, impedindo que sejam sorteados menos de 6 números -- já que em caso de false ele não adiciona o nº no array.
            break;    
        }
    };    
    if(numeroValido == true){
    numerosSorteados[i] = numero;
    }
};
return numerosSorteados;
};

var escolherNumero = function(numerosUsuario){ // DUVIDA AQUI! ESSE É O 1º Q FIZ, NÃO CONTROLA REPETIÇÃO, TENTEI UNS Q CONTROLASSE MAS NÃO ESTÁ DANDO.
var i = 0;
while(numerosUsuario.length < 6){
    var controle = parseInt(prompt("Escolha um número de 1 a 60"));
    if(controle <= 60  && controle >= 1){
        numerosUsuario[i] = controle;
        i++;
    }
    else{
        alert("Número inválido! Escolha outro número!");
    }
};
return numerosUsuario;
};

var contagemDeAcertos = function(numerosUsuario, numerosSorteados, qtdadeDeAcertos){
for(var i = 0; i < 6; i++){
    for(var ii = 0; ii < 6; ii++){
        if(numerosUsuario[i] == numerosSorteados[ii]){
        qtdadeDeAcertos++;
        }
    }    
};
return qtdadeDeAcertos;
};

var numerosSorteados = [];
var numerosUsuario = [];
var qtdadeDeAcertos = 0;

numerosSorteados = sortearNumero(numerosSorteados);
numerosUsuario = escolherNumero(numerosUsuario);
qtdadeDeAcertos = contagemDeAcertos(numerosUsuario, numerosSorteados, qtdadeDeAcertos);

mostra("Você acertou " + qtdadeDeAcertos + " número(s)!");

console.log(numerosSorteados);


</script>

Eu tentei este aqui, mas ele cai no problema do array na posição 0! Ele sempre retorna que já ta repetido qdo põe o primeiro. É o mais próximo que cheguei.

<script>
var escolherNumero = function(numerosUsuario){

for(var i = 0; i < 6; i++){
    var controle = true;
    var numero = parseInt(prompt("Digite um número de 1 a 60"));
    numerosUsuario[i] = numero;

    if(numero >= 1 && numero <= 60){
        for(var ii = 0; ii < 6; ii++){
            if( numero == numerosUsuario[ii]){
                alert("Número já escolhido, tente outro!");
                controle = false;
                break;
            }
        };
    }
    else{
        alert("Número inválido! Tente novamente!");
        controle = false;
    }
    if(controle == false){
        i = i - 1;
    }
};
return numerosUsuario;
};
</script>
3 respostas

Cara tente fazer o que segue abaixo. Eu não cheguei a revisar o restante do código, mas veja se isso ajuda.

var escolherNumero = function() { // Remova o parâmetro de entrada da função

    var numerosUsuario = [];

    while(numerosUsuario.length < 6) { // Troque o primeiro loop por esse while, afinal o processo continua até preencher o array com 6 números

        var controle = true; // Coloque o controle para dentro do primeiro loop

        var numero = parseInt(prompt("Digite um número de 1 a 60"));
        if(numero >= 1 && numero <= 60) {
            for(var ii = 0; ii < numerosUsuario.length; ii++) { // TROCAR "ii < 6" por "ii < numerosUsuario.length" para varrer o array
                if(numero == numerosUsuario[ii]) {
                    alert("Número já escolhido, tente outro!");
                    controle = false;
                    break;
                }
            }
        } else {
            alert("Número inválido! Tente novamente!");
            controle = false;
        }

        if(controle == true) { // Coloque a condição para testar o controle
            numerosUsuario.push(numero); // Insira o número no array com o comando push()
        }
    }

    return numerosUsuario;
};

var numerosUsuario = escolherNumero(); // Inicie a variável numerosUsuario atribuindo a função escolherNumero() como seu valor
<script>

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

document.write("Diga quais são os 6 números do seu jogo:" + "<hr>");
var jogo = [];
for(i = 0; i < 6; i++) {
    jogo[i] = parseInt(prompt("Diga qual o seu " + (i + 1) + "º número da sorte:"));
}

alert("Clique em OK para visualizar sorteio.");
var sorteio = [];
for(i = 0; i < 6; i++) {
    sorteio[i] = Math.round( Math.random() * 60 );
}
var adivinha = quantidadeAcertos(jogo, sorteio);
document.write("Você jogou os números: " + jogo + "<br>");
document.write("Os números sorteados foram: " + sorteio + "<br>");
document.write("Você acertou " + adivinha + " número(s)");

</script>
solução!
<script>

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

document.write("Diga quais são os 6 números do seu jogo:" + "<hr>");
var jogo = [];
for(i = 0; i < 6; i++) {
    jogo[i] = parseInt(prompt("Diga qual o seu " + (i + 1) + "º número da sorte:"));
}

alert("Clique em OK para visualizar sorteio.");
var sorteio = [];
for(i = 0; i < 6; i++) {
    sorteio[i] = Math.round( Math.random() * 60 );
}
var adivinha = quantidadeAcertos(jogo, sorteio);
document.write("Você jogou os números: " + jogo + "<br>");
document.write("Os números sorteados foram: " + sorteio + "<br>");
document.write("Você acertou " + adivinha + " número(s)");

</script>