1. Einleitung
Stellen Sie sich ein eindimensionales Array wie eine lange Pizzaschachtel vor, in der alle Stücke in einer Reihe liegen – lecker, aber eintönig.
Und nun stellen wir uns einen Arbeitsplan oder ein Schachbrett vor. Dort ist alles in Zeilen und Spalten organisiert – also in einer Tabelle. Genau das ist ein klassischer Anwendungsfall für ein zweidimensionales Array.
Im echten Leben begegnen uns zweidimensionale Arrays auf Schritt und Tritt:
- Tabellen mit Gehältern von Mitarbeitenden (Zeilen – Personen, Spalten – Monate).
- Ein Bild auf dem Bildschirm (jedes „Feld“ – die Farbe eines Pixels, mit zwei Koordinaten: X und Y).
- Matrixberechnungen und Datenverarbeitung.
- Ein Schachbrett oder ein Spielfeld für Tic-Tac-Toe.
Zweidimensionale Arrays werden manchmal auch Matrix genannt (dieser Begriff stammt aus der Mathematik).
Es gibt sehr viele Situationen, in denen Sie als Programmierer:in ein zweidimensionales Array benötigen könnten. Die Umsetzung fast jedes Brettspiels ist praktisch ein fertiges zweidimensionales Array: „Schach“, „Dame“, „Tic‑Tac‑Toe“, „Schiffe versenken“:

Das Spielfeld von „Schach“ oder „Schiffe versenken“ passt perfekt auf zweidimensionale Arrays, bei denen als Koordinaten der Felder einfach Zahlen verwendet werden. Nicht „Bauer e2 ⟶ e4“, sondern „Bauer (4,1) ⟶ (4,3)“. Für Sie als Programmierer:in ist das sogar einfacher.
2. Syntax für die Deklaration zweidimensionaler Arrays
Es klingt nur bis zur ersten Deklaration kompliziert! Gehen wir Schritt für Schritt vor.
Allgemeine Regel
type[][] NameOfArray;
Hier sind zwei leere []-Klammern – kein Compilerfehler nach einer Nacht mit Kaffee, sondern der Hinweis: Das Array ist zweidimensional.
Beispiele
int[][] matrix;
double[][] gradesTable;
string[][] chessBoard;
Erstellen eines Arrays
Wir geben die Größen an: die Anzahl der Zeilen und der Spalten.
matrix = new int[3][4]; // 3 Zeilen, 4 Spalten
Das ist eine 3x4‑Tabelle: Stellen Sie sich ein Excel-Blatt mit 3 Zeilen und 4 Spalten vor.
Sie können die Variable auch gleich deklarieren und das zweidimensionale Array erzeugen:
int[][] matrix = new int[3][4];
Sie können auch direkt mit Werten initialisieren (ähnlich wie bei einem eindimensionalen Array):
int[][] example = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Tabelle: 3 Zeilen, 3 Spalten
Visuelle Darstellung
┌─────┬─────┬─────┬─────┐
│ 0 │ 1 │ 2 │ 3 │ ← Spalten (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │ 0,1 │ 0,2 │ 0,3 │ ← Zeile 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │ 1,1 │ 1,2 │ 1,3 │ ← Zeile 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │ 2,1 │ 2,2 │ 2,3 │ ← Zeile 2 (Row 2)
└─────┴─────┴─────┴─────┘
Jedes Element wird durch ein Indexpaar [Zeile, Spalte] festgelegt.
3. Indizierung und Zugriff auf Elemente
In einem zweidimensionalen Array gibt man für den Zugriff auf ein Element zwei Indizes an:
- Der erste – die Zeilennummer.
- Der zweite – die Spaltennummer.
// In der zweiten Zeile (Index 1), dritte Spalte (Index 2)
matrix[1][2] = 99;
Falls Sie an Schachnotation gewöhnt sind: Die Indizierung beginnt bei null. Das heißt, das erste Element ist [0][0].
Schreiben und Lesen
int[][] data = new int[5][2];
data[1][1] = 5; // Schreiben
int value = data[1][1]; // Lesen
So sieht das im Speicher aus:

4. Befüllen eines zweidimensionalen Arrays
Schreiben wir Code, der die Matrix mit fortlaufenden Zahlen von 1 bis 12 füllt, damit klar wird, wie das funktioniert.
int[][] matrix = new int[3][4];
int value = 1;
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 4; col++)
{
matrix[row][col] = value;
value++;
}
}
Illustration:
Nach der Ausführung:
┌────┬────┬────┬────┐
│ 1 │ 2 │ 3 │ 4 │
├────┼────┼────┼────┤
│ 5 │ 6 │ 7 │ 8 │
├────┼────┼────┼────┤
│ 9 │ 10 │ 11 │ 12 │
└────┴────┴────┴────┘
5. Aufbau zweidimensionaler Arrays
Jetzt erfahren Sie, wie zweidimensionale Arrays tatsächlich aufgebaut sind. Bereit?
Zweidimensionale Arrays sind in Wirklichkeit Arrays von Arrays!
Mit anderen Worten: Wenn bei einem gewöhnlichen Array die „Array-Variable eine Referenz auf einen Container speichert, der die Elemente des Arrays enthält“, dann ist es bei zweidimensionalen Arrays etwas „explosiver“: Die Variable des zweidimensionalen Arrays hält eine Referenz auf einen Container, der Referenzen auf eindimensionale Arrays speichert. Das ist besser einmal gesehen als hundertmal erklärt:

Links sehen wir die „Variable für das zweidimensionale Array“, die eine Referenz auf das „Objekt – zweidimensionales Array“ hält. In der Mitte sehen wir das „Objekt – zweidimensionales Array“, in dessen Zellen Referenzen auf eindimensionale Arrays gespeichert sind – die Zeilen des zweidimensionalen Arrays. Und rechts sehen Sie vier eindimensionale Arrays – die Zeilen unseres zweidimensionalen Arrays.
So sind zweidimensionale Arrays tatsächlich aufgebaut. Dieser Ansatz bringt Java-Entwickler:innen mehrere Vorteile:
Erstens können wir, da der „Container der Container“ Referenzen auf die „Array-Zeilen“ speichert, Zeilen sehr schnell und einfach vertauschen. Um auf den „Container der Container“ zuzugreifen, braucht man nur einen Index statt zwei. Beispiel:
int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];
Mit solchem Code können wir die Zeilen vertauschen:
// Wichtige Matrix mit Daten
int[][] matrix = {
{1, 2, 3, 4, 5},
{5, 4, 3, 2, 1}
};
int[] tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;
Wenn Sie beim Zugriff auf ein zweidimensionales Array nach dem Array-Namen nur einen Index angeben, greifen Sie damit auf den Container-der-Container zu, in dessen Zellen Referenzen auf gewöhnliche eindimensionale Arrays gespeichert sind.
6. Ausgabe eines zweidimensionalen Arrays
Für die Ausgabe einer zweidimensionalen Tabelle verwendet man üblicherweise eine doppelte Schleife – das ist, als würde man in der Konsole ein Labyrinth „malen“. Beispiel:
for (int row = 0; row < matrix.length; row++)
{
for (int col = 0; col < matrix[row].length; col++)
{
System.out.print(matrix[row][col] + "\t");
}
System.out.println(); // Zeilenumbruch
}
Beispielausgabe:
1 2 3 4
5 6 7 8
9 10 11 12
Übrigens: Hier haben Sie gelernt, wie man mit ein paar Zeilen Code hübsch Tabellen „zeichnet“!
GO TO FULL VERSION