# ArrayList kopieren



## fmacloud (4. Mai 2007)

Hallo ich hab ein kleines Problem mit ArrayLists. In dem unteren Code soll in der addTables() Methode aus einer ArrayList ein Label[]-Objekt in eine andere ArrayListe kopiert werden (  gzTable.add(lokal.clone())  ). Ich dachte mit clone könnte man erreichen, dass das Objekt lokal als Kopie angelegt wird, wenn ich allerdings ein weiteres Objekt anlege, wird aus dem ersten wieder ein null. LocalSystem ist dabei ne eigene Klasse. Vielleicht könnte mir jemand helfen und sagen wo der Fehler liegt. Danke schon mal in vorraus!  

```
import java.util.ArrayList;
import org.eclipse.draw2d.Label;
import src.LocalSystem;

public class Zustaende {
	public int lokaleSysteme;
	Label[] lokal = null;
	ArrayList<LocalSystem> systems = new ArrayList<LocalSystem>();
	ArrayList<Label[]> gzTable = new ArrayList<Label[]>();
	ArrayList<Boolean> gzBool = new ArrayList<Boolean>();
	ArrayList<Integer> counter = new ArrayList<Integer>();
	int size;
		
	public void createCombinations(ArrayList<LocalSystem> sys){
		systems = sys;
		for(int i=0;i<systems.size();i++){
			counter.add(new Integer(systems.get(i).zustand.size()));
		}
		size = systems.size();
		addTables();
	}
	
	public void addTables(){
			for(int q=0;q<counter.size();q++){
				lokal = new Label[systems.size()];
				lokal[q] = systems.get(q).zustand.get(counter.get(q)-1);
			}
			
			gzTable.add(lokal.clone());
			gzBool.add(false);

			boolean end = true;
			for(int i=0;i<counter.size();i++){
				if(counter.get(i)!=1){
					end=false;
					break;
				}
			}

			if(counter.get(counter.size()-1)>1){
				counter.set(counter.size()-1, counter.get(counter.size()-1)-1);
			}
			else
			{
				int countdown = counter.size()-2;
				while(countdown>0){
					if(counter.get(countdown)>1){
						counter.set(countdown, counter.get(countdown)-1);
						for(int r=countdown+1;r<counter.size();r++){
							counter.set(r, new Integer(systems.get(r).zustand.size()));
						}
						break;
					} else {
						countdown--;
					}
				}
				if(countdown==0){
					
					counter.set(0, new Integer(counter.get(0)-1));
					for(int r=1;r<counter.size();r++){
						counter.set(r, new Integer(systems.get(r).zustand.size()));
					}
					size--;
					
				}
			}
			
			if(end==false)
			{
				addTables();
				
			}
			else{
				//Durchgang beendet, alle Zustände angelegt				
							
			}
		}
}
```


----------



## fmacloud (4. Mai 2007)

Okay sorry hat sich erledigt. Natürlich das man das new nicht in die for-schleife packen D'oh


----------

