Pesquisa em ArrayList

4 respostas
G

Olá pessoas, sou iniciantes no java, e realmente preciso de ajuda no código que fiz abaixo:

public class Main
{
    public static void main(String[] args)
    {
        
        Apostadores api = new Apostadores();
        ArrayList<Apostadores> ap = new ArrayList<Apostadores>();
        api.setCodigo(123);
        api.setMunicipio("BeloJardim");
        api.setNumeros("02,04,05,10,11,15");
        ap.add(api);
        
        //verifica
        String sorteados = ("52,38,11,15,51,20");
        String[] sep = sorteados.split(",");
        String[] temp = new String[6];
        String[] res = new String[6];
        int cont = 0;
        for(int i = 0; i < ap.size(); i++){
            temp = ap.get(i).getNumeros().split(",");
            for (int j = 0; j< sep.length; j++){
                if (temp[i] == sep[j]){
                    res[cont] = temp[i];
                    cont++;
                }
            }
        }
        
        
        for (int i=0; i< res.length;i++){
            System.out.println(res[i]);
        }
    }
}

O que estou tentando fazer, é o seguinte: Tendo em mente um número sorteado, por exemplo:
String sorteados = (“52,38,11,15,51,20”);

Queria, pesquisar, dentro desses individualmente(independente de ordem), e retornar com o res, aqueles que ambos tem em comum. Agora fazendo isso de vários objetos, no código, fiz apenas de 1, para ver se conseguia, e ir adicionando os objetos depois.
Agradeço a atenção, de todos que tentarem me ajudar.

4 Respostas

4

Faz muito tempo atras eu ajudei um usuário com problema parecido, o que eu fiz foi trabalhar com int apenas, além de ser mais fácil de trabalhar com números usando eles (óbvio), vc pode deixa-los por ordem numérica, Diferente se eu usasse String para ordenar numeros que me ao ordenar {1 , 2 , 3, 10} ele me traria {1, 10, 2, 3}.

O código pode parecer um pouco estranho pois é um pouquinho mais complexo que este q vc estava implementando porém é simples se analisa-lo com cuidado. Porém n pense q o código esta completo, ele possui limitador de até 3 jogadores e NÃO possui os comparadores que é facil implementar.

public static void main(String[] args) {

        System.out.println("****************************************************");
        System.out.println("            Teste de Vetores - Mega Sena          ");
        System.out.println("****************************************************\n");

        List<int[]> lista = new ArrayList<>();
        for (int i = 0; i < 3; i++) { // define que sera para tres jogadores
            System.out.println("***Jogador Nº:" + (i + 1) + " Digite sua aposta contendo 6 números de 01 a 60***\n");
            lista.add(adicionarDadosJogador());
        }
        compararValores(lista, sortearOrdenarValores());

    }

    public static int[] adicionarDadosJogador() {
        int[] jogada = new int[6]; // 
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < 6; i++) {
            System.out.println((i + 1) + "º Numero");
            int valor = input.nextInt();
            while (valor < 0 || valor >= 60) { // Isso serve para preencher novamente caso o valor n seja maior q 0 ou menor igual a q 60
                System.out.println((i + 1) + "º Numero"); // mensagem repete ate q seja validado
                valor = input.nextInt();
            }
            jogada[i] = valor; // adiciona o valor a jogada
        }
        Arrays.sort(jogada);
        return jogada;
    }

    public static int[] sortearOrdenarValores() {
        Random random = new Random();
        int[] resultado = new int[6];
        for (int i = 0; i < 6; i++) {
            int valor = random.nextInt(60);
            resultado[i] = valor;
        }
        Arrays.sort(resultado);
        return resultado;
    }

    public static void compararValores(List<int[]> jogadores, int[] resultado) {
        for (int i = 0; i < 3; i++) { // exemplo de GET do list
            int[] jogada = jogadores.get(i);
            System.out.println("Jogador" + (i + 1)+"   :"+Arrays.toString(jogada));
        }
        System.out.println("Resultado: "+Arrays.toString(resultado));
        // ... Aqui vc coloca o comparador
    }

}
4

Para facilitar tentei implementar meu código no seu, n sei se funciona, n testei.

public static void main(String[] args) {
    Apostadores api = new Apostadores();
    ArrayList<Apostadores> ap = new ArrayList<Apostadores>();
    api.setId(123);
    api.setNome("Josefino");
    api.setApostas(new int[]{02, 03, 04, 10, 15, 40});
    ap.add(api);

    //verifica
    int[] resultado = sortearOrdenarValores(); // isso sorteia os valores aleatórios
    String valoresIguais="";
    int acertos=0;
    for (int i = 0; i < resultado.length; i++) {
        for (int j = 0; j < api.getApostas().length; j++) {
            if (resultado[i] == api.getApostas()[j]) {
                acertos++;
                valoresIguais = valoresIguais+" / "+String.valueOf(api.getApostas()[j]);
                break;
            }
        }
    }
    System.out.println("Jogador: "+api.getNome());
    System.out.println("Acertos: "+acertos);
    System.out.println("Valores Apostados: "+Arrays.toString(api.getApostas()));
    System.out.println("Resultado Final: "+((valoresIguais.isEmpty())? "Nenhum Acerto":valoresIguais));
    System.out.println("Valores do Sorteio: "+Arrays.toString(resultado));
}

public static int[] sortearOrdenarValores() { // Isso gera valores aleatórios
    Random random = new Random();
    int[] resultado = new int[6];
    for (int i = 0; i < 6; i++) {
        int valor = random.nextInt(60);
        resultado[i] = valor;
    }
    Arrays.sort(resultado);
    return resultado;
}
}

Classe Apostador:

public class Apostadores {

private int id;
private int[] apostas;
private String nome;

public Apostadores(){
}

//GETTERS E SETTERS

}
P

ola

existe um erro fundamental ai. Strings não devem ser comparadas com == e sim com o metodo equals

o motivo é que o == entre objetos faz outra comparação (verifica se são referencias para o mesmo objeto, o que com Strings as vezes retorna falsos positivos por conta de umas otimizações).

minha sugestão: isso é uma loteria. loteria sorteia numeros. use numeros. é mais facil pra ordenar e comparar.

se vc for usar numeros, o 02, 03 vai ser convertido pra 2 ou 3, mas vc pode ter surpresas com 08 e 09 por conta da base ( force a conversão pra usar base 10 ).

vc pode continuar usando Strings no “02”, “03” só lembre de usar .equals pra comparar.

na sua classe apostadores não receba numeros como uma String. Receba como uma coleção ou array.

no seu setter, force chamar Arrays.sort pra ordenar a aposta.

mesma coisa com numeros sorteados.

vc vai ver que compara2 arrays de numeros ordenados é mais facil de lidar.

G

Obrigado à todos que me responderam.

Criado 3 de dezembro de 2016
Ultima resposta 6 de dez. de 2016
Respostas 4
Participantes 3