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

Dúvida no Ex. 1 da Aula 7 - Desafio final

Boa noite. Estou na dúvida sobre como fazer a interseção dos arrays dos números sorteados com o dos números informados pelo usuário. Eu vi algumas funções de como fazer mas não consegui entender o funcionamento, gostaria de fazer da forma mais simples possível para facilitar a compreensão. No meu código abaixo consigo pegar os valores digitados pelo usuário e informar no final, porém, também gostaria de fazer a verificação se um número já foi informado antes para que não informar novamente, da forma que está consigo evitar que seja digitado o mesmo número logo em sequência mas quando incrementa ele já não "enxerga" mais se o valor havia sido informado. Peço ajuda por favor. Segue abaixo meu código.

var sorteio = function(){

    var numerosLoteria = new Array(10,25,38,43,45,59);
    var numerosAcertosUsuario = [];
    var numerosUsuario = [];

    for(i = 0; i < numerosLoteria.length; i++){        
        numerosUsuario = parseInt(prompt("Digite o " + (i+1) + "º número escolhido."));

        if(numerosUsuario == numerosAcertosUsuario){
            alert("Número já informado! Tente outro.");
            i--;
            continue;
        }

        if(isNaN(numerosUsuario) || numerosUsuario == "undefined" || numerosUsuario == ""  || numerosUsuario == 0){
            alert("Caracteres não permitidos ou número não informado! Tente outro.");
            i--;
            continue;
        }

        numerosAcertosUsuario.push(numerosUsuario);

        var elementos = numerosAcertosUsuario.join("-");        
    }
    alert("Você acertou os seguintes números " + elementos);
}

sorteio();
4 respostas

Bom dia Fabrício,

Creio que na linha onde você compara

if(numerosUsuario == numerosAcertosUsuario)

Você deveria comparar o numero que o usuário digitou com numerosUsuario[] percorrendo esse array com um for ou while.

E depois comparar o numero que o usuário digitou com numerosLoteria[] se algum numero bater o mesmo deve ser adicionado no array numerosAcertosUsuario

Att,

Bom dia Ramon,

Primeiramente obrigado pela ajuda. Me ajudou bastante, porém, ainda não consegui resolver totalmente. Da forma que fiz até funciona mas apresenta alguns problemas, vou citar abaixo.

1- Gostaria de que o sistema aceitasse a qualquer momento que o valor informado, independente da ordem fosse incrementado no array.

Exemplo:

Na 5ª tentativa informo o valor 25, portanto, ele seria um dos números corretos que está presente no array numerosLoteria[] mas no meu sistema se não for informado meio que na ordem, então não faz o push no array numerosAcertosUsuario[].

2- Criei o array numerosErrosUsuario[] para armazenar os valores incorretos e fazer a verificação se o usuário já digitou anteriormente, porém, não está funcionando totalmente.

Poderia me auxiliar novamente?

Segue abaixo o código fonte:

var sorteio = function(){

    var numerosLoteria = new Array(10,25,38,43,45,59);
    var numerosAcertosUsuario = [];
    var numerosUsuario = [];
    var numerosErrosUsuario = [];

    for(i = 0; i < numerosLoteria.length; i++){
        numerosUsuario = parseInt(prompt("Digite o " + (i+1) + "º número escolhido."));

        for(j = 0; j < numerosLoteria.length; j++){
            if(numerosUsuario == numerosAcertosUsuario[j]){
                alert("Número já informado! Tente outro.");
                i--;
                break;
            }else if(numerosUsuario == numerosLoteria[j]){
                numerosAcertosUsuario.push(numerosUsuario);
            }

            if(numerosUsuario == numerosErrosUsuario[j]){
                alert("Número já informado! Tente outro.");
                i--;
                break;
            }else if(numerosUsuario != numerosLoteria[i]){
                numerosErrosUsuario.push(numerosUsuario);
                //i--;
                break;
            }
        }        
        //console.log("numerosAcertosUsuario: " + numerosAcertosUsuario);
        //console.log("numerosErrosUsuario: " + numerosErrosUsuario);

        var totalDeAcertos = numerosAcertosUsuario.join("-");

        if(isNaN(numerosUsuario) || numerosUsuario == "undefined" || numerosUsuario == ""  || numerosUsuario == 0){
            alert("Caractere não permitido ou número não informado! Tente outro.");
            i--;
            continue;
        }        
    }
    alert("Você acertou os seguintes números " + totalDeAcertos);
}

sorteio();

Obrigado pela atenção.

solução!

Oi Fabrício,

como você está bem no caminho certo, vou só comentar de uma coisa que o Array já tem pronto e que pode te ajudar:

seuArray.indexOf(valorDigitado)

ou, usando seus nomes de variáveis como exemplos:

numerosAcertosUsuario.indexOf(numerosUsuario)

Se o número buscado estiver no array, ele devolve a posição dele. E o mais legal é que, se ele não estiver no array, o indexOfdevolve -1!

Então fica mais tranquilo fazer esse algoritmo que você quer. Vai ser algo como:

if (numerosAcertosUsuario.indexOf(numerosUsuario) == -1) {
    // o que fazer quando ele não está lá
}

Bons estudos!

Cecilia, boa noite. Muito obrigado pela força. Um abraço