CodeGym /Kurse /JAVA 25 SELF /Zweidimensionale Arrays

Zweidimensionale Arrays

JAVA 25 SELF
Level 7 , Lektion 3
Verfügbar

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“:

Zweidimensionale Arrays 2

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;
Deklaration eines zweidimensionalen Arrays in Java

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
Initialisierung eines zweidimensionalen Arrays mit Werten

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;
Zuweisung eines Werts an ein Element eines zweidimensionalen Arrays

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:

Zweidimensionale Arrays

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++;
    }
}
Befüllen eines zweidimensionalen Arrays mit fortlaufenden Zahlen

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:

Aufbau zweidimensionaler Arrays

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“!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION