4.6.1 Zweidimensionale Arrays
Die Elemente eines Arrays können beliebige Datentypen sein - int-Zahlen, double-Zahlen, Objekte der Klasse Gegenstand, Objekte der Klasse Person und so weiter. Die Array-Elemente können aber auch eigene Arrays sein.
Stellen Sie sich einen Schrank mit 10 Schubladen vor, und in jeder Schublade können bis zu 20 Werkzeuge liegen. Dann würde man eine Schublade als Array von 20 Objekten der Klasse Werkzeug implementieren, und den Schrank als Array von 10 Schubladen.
Das BlueJ-Klassendiagramm des Projektes
Quelltext der Klasse Schrank
Im Konstruktor der Klasse Schrank wird ein Array fach[10] erzeugt, der 10 Objekte der Klasse Schublade enthält.
Quelltext der Klasse Schublade
Im Konstruktor der Klasse Schublade wird ein Array tools[20] angelegt, der 20 Objekte der Klasse Werkzeug enthält.
Die Methode fuelleSchublade() fügt 20 verschiedene Werkzeuge in die Schublade ein. Die Bezeichnungen der 20 Werkzeuge werden aus einem lokalen Array namen[] ausgelesen, den ChatGPT generiert hat.
Quelltext der Klasse Werkzeug
Der Quelltext der Klasse Werkzeug ist recht kurz, er dient ja auch nur zu Demonstrationszwecken.
Der Array, der in der Klasse Schrank angelegt wird, ist ein Array aus Arrays. Die 10 Array-Elemente (Schubladen) enthalten jeweils 20 Array-Elemente (Werkzeuge). Man könnte das graphisch in Form einer Tabelle aus 10 Reihen und 20 Spalten darstellen, wobei die Reihen die Schubladen und die Spalten die Werkzeuge repräsentieren. Einen solchen Array könnte man zu Recht als "zweidimensionalen Array" bezeichnen.
Man könnte diesen zweidimensionalen Array aber auch noch einfacher definieren, ohne den Umweg über Schubladen:
Quelltext der Klasse Schrank_einfach
In dieser Klasse wir ein "echter" zweidimensionaler Array tools[10][20] angelegt. Zum Erzeugen der Array-Inhalte sind jetzt zwei geschachtelte for-Schleifen notwendig. Die äußere Schleife ist für die 10 Reihen zuständig, die inner for-Schleife für die 20 Werkzeuge bzw. Fächer für die Werkzeuge. Um den Quelltext kurz zu halten, wurde hier einfach der String "Bezeichnung" für alle 200 Werkzeuge eingesetzt, was natürlich in einem echten Programm nicht gehen würde.
Zweidimensionale Arrays spielen eine ganz wichtige Rolle bei vielen Anwendungen, nicht nur bei Brettspielen mit 8 x 8 oder mehr Feldern, sondern auch bei allen Office-Anwendungen, bei denen man Tabellen benötigt. Eine Tabelle ist nämlich nichts anderes als ein zweidimensionaler Array.
4.6.2 Mehrdimensionale Arrays
Auch dreidimensionale oder vierdimensionale Arrays können auf diese Weise produziert werden. Man muss dann einfach drei oder vier Klammerpaare [] bei der Deklaration und Initialisierung verwenden.
private int[][][] noten;
Der "innere" Array speichert die Noten eines Schülers, der "mittlere" Array speichert alle Schüler und Schülerinnen einer Klasse, und der "äußere" Array steht für die gesamte Schule mit ihren vielen Klassen.
noten[14][7][3] = 4
steht dann für die Note des Faches Nr. 3 der Schülerin Nr. 7 der Klasse Nr. 14. Will man auch noch die Jahrgangsstufe in dem Array berücksichtigen, könnte man einen vierdimensionalen Array
private int[][][][] noten;
implementieren. Die erste Klammer steht für die Jahrgangsstufe, die zweite für die Klasse in dieser Stufe, die dritte für den Schüler in dieser Klasse und die vierte für das Fach.
Mit einem fünfdimensionalen Array
private int[][][][][] noten;
könnte man zusätzlich noch eine zeitliche Dimension in die Notenverwaltung einbauen. Die fünfte Array-Ebene würde dann alle Noten eines Faches eines Schülers im Laufe des Schuljahres speichern.
Übung 4.6.2 #1
- Deklarieren und initialisieren Sie einen dreidimensionalen Array, der einen Schubladenschrank mit 6 Reihen von je 8 Schubladen repräsentiert. Jede Schublade soll 10 Werkzeuge enthalten (also Objekte der Klasse Werkzeug).
- Deklarieren und initialisieren Sie dann einen vierdimensionalen Array, der einen Lagerraum repräsentiert, der 10 solcher Schubladenschränke enthält.
- Deklarieren und initialisieren Sie schließlich einen fünfdimensionalen Array, der ein Lagerhaus repräsentiert, das 12 solcher Lagerräume enthält.
Die Quelltexte der Java-Klassen können ähnlich wie in dem Beispiel auf dieser Seite minimal sein. Es muss am Ende jedoch ein BlueJ-Klassendiagramm mit allen Klassen und ihren Beziehungen zu sehen sein.
Übung 4.6.2 #2
Erstellen Sie ein Java-Projekt für eine Notenverwaltung mit 10 Klassen, jeweils 15 Schülern und Schülerinnen mit jeweils 8 Fächern.
Schreiben Sie das Grundgerüst dieser Verwaltung, also die Array-Deklarationen und -Initialisierungen selbst, und lassen Sie sich dann von einer KI den dreidimensionalen Array mit generierten Schülernamen und Noten auffüllen.