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

Dúvida com ArrayList

Amigos

Boa tarde,

Ultimamente tenho focado em exercícios aleatórios, só para fixar a lógica. Neste abaixo, crio 3 listas, uma com os divisíveis por 4 até 1000, e a outra com os de 6. Comparo os divisíveis que são iguais, adicionando todos em uma terceira lista, ordenando e trazendo os repetidos. Porém, o último "for" só esta indo ate a 51º posição do array "comparador". Não retorna erro, mas só trás os 11 primeiros valores repetidos, e não segue ate o comparador.size(). Alguém saberia me dizer o porque ? Estou quebrando a cabeça e realmente não achei solução.

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class MultiplosArrays {

    public static void main(String[] args) {

        ArrayList<Integer> list1 = new ArrayList();
        ArrayList<Integer> list2 = new ArrayList();
        ArrayList<Integer> comparador = new ArrayList();
        int a = 4;
        int b = 6;

        for (int i = 0; i < 1000; i++) {
            if (i % a == 0) {
                list1.add(i);
            }
        }

        for (int i = 0; i < 1000; i++) {
            if (i % b == 0) {
                list2.add(i);
            }
        }

        System.out.println("----LIST1----");
        System.out.println("1000 por " + a + " - " + list1.size());
        for (int i = 0; i < list1.size(); i++) {
            comparador.add(list1.get(i));            
        }

        System.out.println("----LIST2----");
        System.out.println("1000 por " + b + " - " + list2.size());
        for (int i = 0; i < list2.size(); i++) {
            comparador.add(list2.get(i));            
        }

        System.out.println("----Valores iguais em ambas as listas----");
        Collections.sort(comparador);

        int c = 0;

        System.out.println("Tamanho do comparador = " + comparador.size());
        for (int i = 1; i < comparador.size(); i++) {            
            if (comparador.get(i) == comparador.get(i - 1)) {                
                System.out.println(i + "º - " + comparador.get(i));                    
                c++;
            }
        }

        System.out.println("Total de valores iguais = " + c);

    }

}

O Resultado é:

----LIST1----
1000 por 4 - 250
----LIST2----
1000 por 6 - 167
----Valores iguais em ambas as listas----
Tamanho do comparador = 417
1º - 0
6º - 12
11º - 24
16º - 36
21º - 48
26º - 60
31º - 72
36º - 84
41º - 96
46º - 108
51º - 120
Total de valores iguais = 11
4 respostas

Você já colocou um syso antes do if do último for? para realmente garantir que ele só ta indo até aí.

Alberto,

Sim, eu ja havia colocado só para verificar isso. A variável i vai ate a 416º, ou seja, ate a ultima posição do comparador.size(). Mas no if, ele so vai ate o 51º. E só retorna os 11 primeiros elementos repetidos. Por exemplo, 132 é divisível por 4 e 6, e não mostra.

solução!

Olá Vitor!,

Cara, como o tipo da variável é um wrapper, a forma indicada para comparar o conteúdo é usando equals,

   System.out.println("Tamanho do comparador = " + comparador.size());
        for (int i = 1; i < comparador.size(); i++) {            
            if (comparador.get(i).equals(comparador.get(i - 1))) {                
                System.out.println(i + "º - " + comparador.get(i));                    
                c++;
            }
        }

Utilizando '==' você está comparando o endereço de memória, que não necessariamente vai ser o mesmo...

Valeu Igor ! Vivendo e aprendendo obrigado. Vlw Alberto !