# Array to ArrayList



## bvdcomp (21. Feb 2011)

Hallo zusammen,

Ich möchte untenstehenden Code von Array nach ArrayList umwandeln.

Leider habe ich "noch" keine Ahnung wie ich das Anstellen soll.

Kann mir jemand helfen?



```
public class Hanoi{
	public static void main(String []args){
		int n=4;
		new Hanoi().start(n); //Rufe Methode start(n) von Klasse Hanoi auf.
	}
	public void start(int n){
		String []turme = showSteps(n);//N-Ringe werden im Array angelegt
		System.out.println("Türme von Hanoi - Step by step!");
		System.out.println("_________________________________________");
		/*
		 * Führe solange diese Schleife aus, bis i kleiner als das Array Turm ist.
		 */
		for(int i=0;i<turme.length;i++){
			System.out.println("Schritt "+(i+1)+"" +
			": Verschiebe Ring von "+turme[i].charAt(0)+" " + //Liefere Char Index=0 von String des Array turme
			"nach "+turme[i].charAt(1));//Liefere Char Index=1 von String des Array turme
		}
		System.out.println("_________________________________________");
		System.out.println("Ende des Programms");
	}
	/*
	 * 
	 */
	public String []changeString(String []array,char a, char b){
		for(int i=0;i<array.length;i++){
			for(int j=0;j<array[i].length();j++){
				if(array[i].charAt(j)==b){
					array[i]=array[i].substring(0,j)+a+array[i].substring(j+1);
				} else if(array[i].charAt(j)==a){
					array[i]=array[i].substring(0,j)+b+array[i].substring(j+1);
				}
			}
		}
		return array;
	}
	/*
	 * 
	 */
	public String []showSteps(int n){//Wie viele Ringe sind hier?
		String []data={"A","B","C"}; // Array mit 3 Werten für die Ringe A, B und C
		String []Array=new String[(int)(Math.pow(2,n))-1];
		for(int i=1;i<=Array.length;i=i*2+1){
			int middle=(i-1)/2;
			Array[middle]="AC";
			String []tempArray=new String[middle];
			for(int left=0;left<middle;left++){
				tempArray[left]=Array[left];
			}
			tempArray=changeString(tempArray,'C','B');
			for(int o=0;o<middle;o++){
				Array[o]=tempArray[o];
			}	
			tempArray=changeString(tempArray,'B','A');
			tempArray=changeString(tempArray,'A','C');
			for(int o=middle+1;o<i;o++){
				Array[o]=tempArray[o-middle-1];
			}
		}
		return Array;
	}
}
```


----------



## Blindxantos (21. Feb 2011)

Hi.
Wenn ich dein Problem richtig verstanden hab, willst du einfach den Array in eine Arraylist umwandeln ja?


```
Arraylist myList = new Arraylist();
for(int i; i<array.length;i++) {
    myList.add(array[i]);
}
```

Du kannst die Arraylist auch typisiert erzeugen, d. h. sie kann nur objekte von einem bestimmten typ aufnehmen:

```
Arraylist<Dog> myList = new Arraylist<Dog>();
```
Der Rest ist wie beim oberen Beispiel, wenn es mich nicht täuscht


----------



## Gast2 (21. Feb 2011)

Hier mal nen Tutorial wie man Lists nutzt:
The List Interface (The Java™ Tutorials > Collections > Interfaces)



> Wenn ich dein Problem richtig verstanden hab, willst du einfach den Array in eine Arraylist umwandeln ja?


Das geht auch einfacher: 

```
List<Dog> dogList = Arrays.asList(deinDogArray);
```


----------



## bvdcomp (21. Feb 2011)

Hallo zusammen
Danke für eure rasche Hilfe.

Ich verstehe das Prinzip, allerdings habe ich ein Problem beim Implementieren. Ich kann es nicht ganz nachvollziehen an welchen Stellen im dies ändern soll.

Wenn ich folgendes ändere:

```
public void start(int n){
		ArrayList <String> turme= new ArrayList(); //Neu
		
		turme = showSteps(n);//N-Ringe werden im Array angelegt // geändert von  String []turme = showSteps(n);
		System.out.println("Türme von Hanoi - Step by step!");
		System.out.println("_________________________________________");
		/*
		 * Führe solange diese Schleife aus, bis i kleiner als das Array Turm ist.
		 */
		for(int i=0;i<turme.length;i++){// Hier muss ich doch mit Iterator rüber??
			System.out.println("Schritt "+(i+1)+"" +
			": Verschiebe Ring von "+turme[i].charAt(0)+" " + //Liefere Char Index=0 von String des Array turme
			"nach "+turme[i].charAt(1));//Liefere Char Index=1 von String des Array turme
		}
```


----------



## Gast2 (21. Feb 2011)

Naja, du musst an allen Stellen wo du auf dein altes Array zugreifst die änderungen vornehmen und die neue List benutzen.


----------



## XHelp (21. Feb 2011)

Ja und? Verhalten, Fehlermeldung etc?
Scheinbar liefert die showSteps ein Array zurück. Das kannst du nicht einfach so einer ArrayList zuweisen. Außerdem macht der Rest in Verbindung mit der ArrayList auch kein Sinn. 
	
	
	
	





```
array[x] -> arrayList.get(x)
```
, 
	
	
	
	





```
array.length -> arrayList.size()
```
 usw


----------



## Landei (21. Feb 2011)

Und man sollte 
	
	
	
	





```
List<String> turme= new ArrayList<String>();
```
 schreiben (wie es.z.B. auch im Tutorial gemacht wird, das EikeB verlinkt hat).


----------

