Skip to main content

Mehrdimensionale Arrays

Wir haben gesehen, dass wir mittels Arrays eine "Liste" von Daten fixer Grösse speichern können. Manchmal möchten wir in der Programmierung aber noch komplexere Daten speichern, wie zum Beispiel Tabellen oder Matrizen. Bei dieser Art von Daten können in zwei Dimensionen von beliebiger Grösse sein. Wir brauchen also so etwas wie ein Array, welches wir in zwei Dimensionen definieren können.

In der Programmierung versucht man immer, Konzepte so zu designen, dass diese möglichst breit anwendbar sind. Zudem sollen diese sich möglichst logisch auf komplexere Situationen erweitern lassen. Wir sehen dieses Prinzip gut wenn wir mit Arrays arbeiten.

Mehrdimensionale Arrays als Arrays von Arrays

Wir haben bereits besprochen, dass wir nicht nur Arrays von primitiven Datentypen, sondern auch Arrays von Referenzdatentypen verwenden können. Zudem wissen wir, dass Arrays Referenzdatentypen sind. Dies gibt uns eine Idee, wie wir solche tabellarische Daten speichern könnten. Wir speichern einfach Arrays in einem Array!

Der Datentyp um eine Array von int zu speichern ist int[]. Entsprechend ist der Datentype um ein Array von int Arrays zu speichern int[][]. Folgendes sind also gültige Deklarationen von Arrays von Arrays:

String[][] arrayOfStringArrays;
int[][] arrayOfIntArrays;
double[][] arrayOfDoubleArrays;

Um ein Array zu erzeugen nutzen wir wieder new:

new String[5][3];   // erzeugt ein Array der Grösse 5 von String Arrays (von jeweils Grösse 3)
new int[2][1]; // erzeugt ein Array der Grösse 2 von int Arrays (von jeweils Grösse 1)

Auch hier gibt es wieder die Möglichkeit, die Elemente direkt zu initialisieren:

int[][] a = new int[][]{{11,12}, {21, 22}, {31, 32}}

Zugriff erfolgt derselben einfachen Logik, wie in folgendem Code illustriert wird:

int[][] a = new int[][]{{11,12}, {21, 22}, {31, 32}};
int firstArray[] = a[0]; // Ein-dimensionales Array mit den Elemntene {11,12}
int firstElement = a[0][0]; // int-Wert 11
int anInt = a[2][1]; // Wert 32

Jagged Arrays

Im obigen Beispielen haben wir das 2-Dimensionale Array so definiert, dass jeweils jedes innere Array die gleiche Anzahl Elemente hatte. Java erlaubt uns jedoch auch Arrays von Arrays zu erzeugen, bei denen die inneren Array von unterschiedlicher Länge sind. Diese nennt man Jagged arrays. Dazu müssen wir aber bei der Erzeugung die zweite Dimension leer lassen

int[][] intArray = new int[3][];  // Array der Grösse 3 von Arrays undefinierter Länge

Wir können nun die inneren Arrays der gewünschten Grösse erzeugen und diese einfach den entsprechenden Array-Elementen des äusseren Arrays zuweisen. In folgendem Beispiel erzeugen wir Arrays der Grössen 3, 2 und 1.

intArray[0] = new int[]{11, 12, 13}; 
intArray[1] = new int[]{21, 22};
intArray[2] = new int[]{31};

Schauen Sie sich den folgenden Code, und im speziellen die Ausgabe des Arrays gut an und experimentieren Sie damit. Wenn Sie dieses Beispiel gut verstanden haben, dann beherrschen Sie das Thema.


Haben Sie Fragen oder Bemerkungen? Schreiben Sie diese doch ins Forum