ArrayList clonando tudo! - Resolvido

2 respostas
gledson85
Estou com problemas em adicionar objetos ao ArrayList. Consigo adicionar os objetos mas toda vez que adiciono um objeto novo o objeto anterior é subtituido pelo novo objeto. No programa exemplo abaixo é gerado três arrays com valores aleatórios que são adicionados ao ArrayList, após adicionar o ultimo array vejo que todos os três arrays estão iguais ao ultimo!
import java.util.ArrayList;
import java.util.Arrays;

public class ProblemaComArrayList {
	public static void main(String args[]) {
		ArrayList quardaArrayList = new ArrayList();
		int array[] = new int[5];
		int indexDoArray = 0;
		Start(array, quardaArrayList, indexDoArray);
	}

	public static void Guarda(int array[], ArrayList quardaArrayList,
			int indexDoArray) {
		Arrays.sort(array);
		quardaArrayList.add(array);//Onde foi que eu errei!?
	}

	public static void Imprimir(int array[], ArrayList quardaArrayList, int indexDoArray) {
		int recuperador[] = (int[]) quardaArrayList.get(indexDoArray);
		for (int index = 0; index < array.length; index++) {
			System.out.print("[" + recuperador[index] + "]");
		}
		System.out.println(indexDoArray);
	}

	public static void Gerador(int array[]) {
		for (int index = 0; index < array.length; index++) {
			array[index] = (1 + (int) (Math.random() * 9));
		}
	}

	public static void Start(int array[], ArrayList quardaArrayList,
			int indexDoArray) {
		int vezes = 3;
		ProblemaComArrayList criar = new ProblemaComArrayList();
		for (int index = 0; index < vezes; index++) {
			criar.Gerador(array);
			criar.Guarda(array, quardaArrayList, indexDoArray);
			criar.Imprimir(array, quardaArrayList, indexDoArray);
			indexDoArray++;
		}
		System.out.print("################");
		System.out.println();
		indexDoArray = 0;
		for (int index = 0; index < vezes; index++) {
			criar.Imprimir(array, quardaArrayList, indexDoArray);
			indexDoArray++;
		}
	}
}
Porque o ultimo objeto adicionado ao ArrayList se alto copia para os valores anteriores?

2 Respostas

thiago.correa

Cara foi difícil entender o que você quer, mas vamos lá. Você está passando um Array para um método, ou seja, você está passando a referencia dele, ou seja, o teu List possui 3 objetos, apontando para a mesma referência do array que armazena os números gerados. Solução, sempre que for gerar um novo conjunto de números, criar um novo array. Outra, havia parâmetros a mais, e desnecesários. Não havia necessidade de criar tantos métodos estáticos.

Sugestão, compare os códigos:

package com.thiago.main; 

import java.util.ArrayList;
import java.util.Arrays;
 
 public class Teste {
	 
 	public static void main(String args[]) {
 		Teste t = new Teste();
 		ArrayList guardaArrayList = new ArrayList();
 		t.start(guardaArrayList);
 	}
 
 	public void guarda(int array[], ArrayList quardaArrayList,
 			int indexDoArray) {
 		Arrays.sort(array);
 		quardaArrayList.add(array);//Onde foi que eu errei!?
 	}
 
 	public void imprimir(ArrayList quardaArrayList) { 		
 		for (int index = 0; index < quardaArrayList.size(); index++) {
 			int[] temp = (int[]) quardaArrayList.get(index);
 			for (int j = 0; j < temp.length; j++) {
 				System.out.print("[" + temp[j] + "]");
 			}
 			System.out.print(index + "\n");
 		} 		
 	}
 
 	public void gerador(int array[]) {
 		for (int index = 0; index < array.length; index++) {
 			array[index] = (1 + (int) (Math.random() * 9));
 		}
 	}
 
 	public void start(ArrayList quardaArrayList) {
 		int vezes = 3;
 		
 		for (int index = 0; index < vezes; index++) {
 			int[] array = new int[5];
 			this.gerador(array);
 			this.guarda(array, quardaArrayList, index); 			
 		}
 		this.imprimir(quardaArrayList);
 		System.out.print("################");
 		System.out.println();

		this.imprimir(quardaArrayList); 			
 	}
 }
gledson85

Valeu pela ajuda!

Ainda estou analizando o código. Faz um bom tempo que não pratico Java e nem outra linguagem. :XD:

Criado 7 de fevereiro de 2007
Ultima resposta 7 de fev. de 2007
Respostas 2
Participantes 2