🏆

Aufgabe gelöst!

Sehr gut!

+30 XP


⚡ 0 XP
✅ 0 gelöst
🔥 0
⊞

Mehrdimensionale Arrays

Informatik · Gymnasium · Klassen 10–13 · PRIMM-Methode

Arrays Interaktiv Kl. 10–13
🎯 Worum geht's? Klasse 10–13 · 2 Unterrichtsstunden

Nach dieser Seite kannst du …

  • ein 2D-Array anlegen und seine Zeilen- und Spaltenzahl bestimmen
  • mit m[zeile][spalte] auf einzelne Felder zugreifen
  • vorhersagen, in welcher Reihenfolge verschachtelte Schleifen die Felder besuchen
  • Summen, Maximum, Diagonalen und das Transponieren selbst programmieren
  • typische Indexfehler finden und beheben

Vorwissen: eindimensionale Arrays und for-Schleifen

📝 Aufgaben

Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.

0
⚡ Gesammelte XP
0
✅ Aufgaben abgeschlossen
0
🔥 Streak (Tage)
–
🎯 Genauigkeit

📐 Das Wichtigste in Kürze

Ein zweidimensionales Array ist ein Array aus Arrays – wie eine Tabelle aus Zeilen und Spalten. Beide Indizes beginnen bei 0.

Spalte 0Spalte 1Spalte 2
Zeile 0123
Zeile 1456
  • int[][] m = new int[2][3]; – 2 Zeilen, 3 Spalten, alle Felder 0
  • int[][] m = { {1, 2, 3}, {4, 5, 6} }; – direkt mit Werten
  • m[1][2] – Zeile 1, Spalte 2 (hier: 6)
  • m.length – Anzahl der Zeilen, m[z].length – Länge der Zeile z
  • Alle Felder besuchen: zwei verschachtelte for-Schleifen, außen über die Zeilen, innen über die Spalten

🏅 Zuletzt verdiente Badges

🔮 Predict
Aufgabe 1 – Deklaration und Größe

Lies die Deklarationen und sage die Ausgaben voraus.

int[][] m = new int[3][4]; System.out.println(m.length); // A System.out.println(m[0].length); // B int[][] b = { {1, 2}, {3, 4}, {5, 6} }; System.out.println(b.length * b[0].length); // C

Was gibt Zeile 2 aus (A)?

Was gibt Zeile 3 aus (B)?

Was gibt Zeile 5 aus (C)?

m.length ist die Anzahl der Zeilen, m[0].length die Länge der ersten Zeile – also die Anzahl der Spalten.
▶️ Run – Größen bestimmen

Trage für jede Deklaration die Zahl der Zeilen, der Spalten und aller Felder ein.

DeklarationZeilenSpaltenFelder insgesamt
new int[2][5]
new double[4][4]
{ {7, 8, 9} }
{ {1}, {2}, {3}, {4} }
Bei new int[z][s] steht zuerst die Zeilenzahl, dann die Spaltenzahl. Bei { … } zählt jede innere Klammer als eine Zeile.
🔍 Investigate

Was liefert m.length bei einem 2D-Array?

Warum bestimmt man die Spaltenzahl mit m[0].length?

✏️ Modify

Ein Stundenplan soll 5 Tage (Zeilen) mit je 6 Stunden (Spalten) haben. Korrigiere die Deklaration.

☕ Java – Modify
In new int[z][s] steht zuerst die Zahl der Zeilen, dann die der Spalten.
🛠️ Make

Schreibe die Methode anzahlFelder: Sie gibt zurück, wie viele Felder das Array insgesamt hat (alle Zeilen sind gleich lang).

☕ Java – Make
Zeilenzahl mal Spaltenzahl – wie du beide bestimmst, weißt du aus Predict.
🔮 Predict
Aufgabe 2 – Zugriff und Standardwerte

Ein Array wird mit new angelegt und danach teilweise belegt.

int[][] t = new int[2][3]; t[0][1] = 7; t[1][2] = 5; t[1][0] = t[0][1] + 1; System.out.println(t[0][0]); // A System.out.println(t[1][0]); // B System.out.println(t[1][2]); // C

Was wird bei A ausgegeben?

Was wird bei B ausgegeben?

Was wird bei C ausgegeben?

Felder eines int-Arrays haben nach new den Wert 0. t[1][0] bekommt den Wert von t[0][1] plus 1.
▶️ Run – Belegung eintragen

Trage ein, welcher Wert nach Zeile 4 in jedem Feld von t steht.

Spalte 0Spalte 1Spalte 2
Zeile 0
Zeile 1
Nur drei Felder werden belegt – alle anderen bleiben 0.
🔍 Investigate

Welches Feld ist t[1][2]?

Welchen Wert hat ein Feld von new double[2][2] vor der ersten Zuweisung?

✏️ Modify

Die letzte Zeile soll das Feld unten rechts auf 9 setzen – sie führt aber zu einem Fehler. Korrigiere sie.

☕ Java – Modify
Die Indizes beginnen bei 0. Welchen Index hat die letzte Zeile, welchen die letzte Spalte eines 2 × 3-Arrays?
🛠️ Make

Schreibe die Methode setzeEcken: Sie setzt alle vier Eckfelder auf wert – für Arrays jeder Größe.

☕ Java – Make
Letzte Zeile: m.length - 1, letzte Spalte: m[0].length - 1. Welche vier Kombinationen ergeben die Ecken?
🔮 Predict
Aufgabe 3 – Verschachtelte Schleifen

Zwei ineinander geschachtelte Schleifen geben das Array aus.

int[][] m = { {1, 2, 3}, {4, 5, 6} }; for (int z = 0; z < m.length; z++) { for (int s = 0; s < m[z].length; s++) { System.out.print(m[z][s] + " "); } System.out.println(); }

Wie oft wird Zeile 5 (print) ausgeführt?

Was steht in der ersten Ausgabezeile?

Die äußere Schleife läuft über die 2 Zeilen, die innere jeweils über die 3 Spalten. Nach jeder Zeile beginnt println() eine neue Ausgabezeile.
▶️ Run – Schleifendurchläufe verfolgen

Trage für jeden Durchlauf der inneren Schleife z, s und den ausgegebenen Wert ein.

Durchlaufzsm[z][s]
1001
2
3
4
5
6
Die innere Schleife läuft erst ganz durch (s = 0, 1, 2), bevor z um 1 steigt.
🔍 Investigate

Welche Laufvariable ändert sich häufiger?

Wozu dient System.out.println() in Zeile 7?

✏️ Modify

Gib das Array spaltenweise aus: erst 1 4, dann 2 5, dann 3 6. Tausche dazu die Schleifen.

☕ Java – Modify
Die äußere Schleife hält einen Index fest, während die innere den anderen durchläuft. Welche Laufvariable muss außen stehen, damit zuerst alle Werte einer Spalte kommen?
🛠️ Make

Schreibe die Methode zaehleGroesser: Sie zählt, wie viele Werte im Array größer als grenze sind.

☕ Java – Make
Ein Zähler, zwei verschachtelte Schleifen und ein Vergleich mit grenze.
🔮 Predict
Aufgabe 4 – Zeilen- und Spaltensummen

Die Schleife addiert die Werte einer Zeile.

int[][] p = { {3, 1, 4}, {1, 5, 9}, {2, 6, 5} }; int summe = 0; for (int s = 0; s < p[1].length; s++) { summe += p[1][s]; } System.out.println(summe);

Wie oft läuft die Schleife?

Was wird ausgegeben?

p[1][s] durchläuft die Zeile mit dem Index 1: 1, 5, 9.
▶️ Run – Summen-Tabelle

Berechne für dasselbe Array p alle Zeilensummen, alle Spaltensummen und die Gesamtsumme.

Spalte 0Spalte 1Spalte 2Zeilensumme
Zeile 0314
Zeile 1159
Zeile 2265
Spaltensumme
Zeilensumme: waagerecht addieren, Spaltensumme: senkrecht. Die Gesamtsumme ist die Summe aller Zeilensummen.
🔍 Investigate

Welcher Index bleibt in p[z][s] gleich, wenn man eine Spaltensumme bildet?

Jede Zeilensumme soll einzeln ausgegeben werden. Wo muss summe = 0; stehen?

✏️ Modify

Ändere den Code so, dass er die Summe der Spalte 2 berechnet (Ergebnis: 18).

☕ Java – Modify
Jetzt bleibt der Spaltenindex fest (2) und der Zeilenindex läuft. Welche Grenze braucht die Schleife dann?
🛠️ Make

Schreibe die Methode zeilensummen: Sie gibt ein Array zurück, das für jede Zeile von m deren Summe enthält.

☕ Java – Make
Das Ergebnis-Array braucht ein Feld je Zeile. Addiere in der inneren Schleife alle Werte der Zeile z in dieses Feld.
🔮 Predict
Aufgabe 5 – Maximum und seine Position

Der Code sucht den größten Wert und merkt sich, wo er steht.

int[][] w = { {4, 9, 2}, {7, 9, 8} }; int max = w[0][0]; int zeile = 0, spalte = 0; for (int z = 0; z < w.length; z++) { for (int s = 0; s < w[z].length; s++) { if (w[z][s] > max) { max = w[z][s]; zeile = z; spalte = s; } } }

Welchen Wert hat max am Ende?

Welche Position wird gespeichert?

Die 9 kommt zweimal vor. Bei > ersetzt nur ein größerer Wert das bisherige Maximum – ein gleich großer nicht.
▶️ Run – Maximumsuche verfolgen

Derselbe Code läuft jetzt mit int[][] w = { {5, 3}, {6, 6}, {2, 8} };. Trage nach jedem Durchlauf max, zeile und spalte ein.

zsw[z][s]maxzeilespalte
005500
013
106
116
202
218
Nur wenn w[z][s] > max gilt, ändern sich alle drei Werte. Sonst bleiben sie wie in der Zeile darüber.
🔍 Investigate

Warum startet max mit w[0][0] und nicht mit 0?

Was ändert sich im Predict-Beispiel, wenn man > durch >= ersetzt?

✏️ Modify

Ändere den Code so, dass er das Minimum und seine Position findet.

☕ Java – Modify
Was muss sich am Vergleich ändern, damit kleinere Werte übernommen werden? Benenne max am besten in min um.
🛠️ Make

Schreibe die Methode enthaelt: Sie gibt true zurück, wenn x irgendwo im Array vorkommt, sonst false.

☕ Java – Make
Sobald du x findest, kannst du sofort true zurückgeben. Wann weißt du sicher, dass x nicht vorkommt?
🔮 Predict
Aufgabe 6 – Diagonalen

Bei einem quadratischen Array liegen die Felder q[0][0], q[1][1], … auf der Hauptdiagonale.

int[][] q = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int d = 0; for (int i = 0; i < q.length; i++) { d += q[i][i]; } System.out.println(d);

Welche Felder werden addiert?

Was wird ausgegeben?

Zeilen- und Spaltenindex sind gleich. Welche Werte stehen in q[0][0], q[1][1] und q[2][2]?
▶️ Run – Nebendiagonale

Jetzt wird für dasselbe Array q die Nebendiagonale (von rechts oben nach links unten) addiert. Trage die Werte je Durchlauf ein.

int n = 0; for (int i = 0; i < q.length; i++) { n += q[i][q.length - 1 - i]; }
iq.length - 1 - iq[i][q.length - 1 - i]n danach
0
1
2
q.length ist 3. Der Spaltenindex läuft also 2, 1, 0, während i 0, 1, 2 läuft.
🔍 Investigate

Warum reicht für die Hauptdiagonale eine Schleife?

Bei welchem Array führt q[i][i] mit i < q.length zu einem Fehler?

✏️ Modify

Ändere den Code so, dass er alle Werte oberhalb der Hauptdiagonale addiert: 2 + 3 + 6 = 11.

☕ Java – Modify
Oberhalb der Diagonale ist der Spaltenindex größer als der Zeilenindex. Du brauchst zwei Schleifen – bei welchem Index muss die innere beginnen?
🛠️ Make

Schreibe die Methode istEinheitsmatrix: Sie gibt true zurück, wenn auf der Hauptdiagonale nur 1 und sonst überall 0 steht.

☕ Java – Make
Für jedes Feld gilt: Auf der Diagonale (z == s) muss 1 stehen, sonst 0. Schon eine Abweichung genügt für false.
🔮 Predict
Aufgabe 7 – Transponieren und Kopieren

Beim Transponieren werden Zeilen zu Spalten.

int[][] a = { {1, 2, 3}, {4, 5, 6} }; int[][] t = new int[a[0].length][a.length]; for (int z = 0; z < a.length; z++) { for (int s = 0; s < a[z].length; s++) { t[s][z] = a[z][s]; } }

Wie viele Zeilen hat t?

Welchen Wert hat t[0][1]?

Welchen Wert hat t[2][1]?

t[s][z] = a[z][s]: Der Wert aus Zeile z, Spalte s landet in Zeile s, Spalte z. Also ist t[2][1] = a[1][2].
▶️ Run – Ergebnis eintragen

Trage ein, welche Werte nach dem Durchlauf in t stehen.

Spalte 0Spalte 1
Zeile 0
Zeile 1
Zeile 2
Die erste Zeile von a (1, 2, 3) wird zur ersten Spalte von t.
🔍 Investigate

Warum wird t mit new int[a[0].length][a.length] angelegt?

Was passiert bei int[][] b = a; b[0][0] = 99;?

✏️ Modify

Ändere den Code so, dass t eine gespiegelte Kopie von a wird: jede Zeile rückwärts, also {3, 2, 1} und {6, 5, 4}.

☕ Java – Modify
t hat jetzt dieselbe Größe wie a. In welche Spalte von t gehört a[z][s], wenn jede Zeile rückwärts stehen soll?
🛠️ Make

Schreibe die Methode kopiere: Sie gibt eine echte Kopie von m zurück – ein neues Array mit denselben Werten.

☕ Java – Make
Lege mit new ein neues Array gleicher Größe an und kopiere jeden Wert einzeln. Warum reicht return m; nicht?
🔮 Predict
Aufgabe 8 – Unterschiedlich lange Zeilen und Fehler

In Java dürfen die Zeilen eines 2D-Arrays verschieden lang sein.

int[][] r = { {1, 2}, {3, 4, 5}, {6} }; System.out.println(r[1].length); // A System.out.println(r[2][0]); // B System.out.println(r[0][2]); // C

Was wird bei A ausgegeben?

Was wird bei B ausgegeben?

Was passiert bei C?

Zeile 0 hat nur die Indizes 0 und 1. Ein Zugriff auf Spalte 2 dieser Zeile bricht das Programm ab.
▶️ Run – Werte oder Fehler

Trage für das Array r den Wert ein – oder Fehler, wenn der Zugriff das Programm abbricht.

AusdruckWert oder „Fehler“
r.length
r[1][2]
r[2].length
r[0][1] + r[1][0]
r[3][0]
r[2][1]
r hat 3 Zeilen (Index 0 bis 2) mit 2, 3 und 1 Werten.
🔍 Investigate

Warum schreibt man in der inneren Schleife s < r[z].length statt s < r[0].length?

Was ist an for (int z = 0; z <= m.length; z++) falsch?

✏️ Modify

Der Code soll alle Werte von m addieren (Ergebnis 21), enthält aber drei Fehler. Korrigiere sie.

☕ Java – Modify
Prüfe: die Bedingung der äußeren Schleife, die Grenze der inneren Schleife und die Reihenfolge der Indizes beim Zugriff.
🛠️ Make

Schreibe die Methode laengsteZeile: Sie gibt den Index der längsten Zeile zurück (die Zeilen können verschieden lang sein).

☕ Java – Make
Merke dir den Index der bisher längsten Zeile und vergleiche in einer Schleife die Längen m[z].length.

🏅 Deine Badges

Verdiente Badges leuchten auf.

📊 Statistik

↺ Zurücksetzen

Alle gespeicherten Daten werden gelöscht.

📄 Arbeitsblatt erstellen

Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.

Bereiche für das Arbeitsblatt