Home > Informatik > Stufe EF > 9. zweidimensionale Arrays

9.1 Eine Notenliste für die ganze Klasse

Notenliste - Graphikanwendung - zelluläre Automaten

Ein Lehrer möchte die Zensuren der Schüler seiner Klasse übersichtlich speichern. Jeder Schüler hat 10 Fächer, und die Klasse besteht aus 30 Schülern.

Schritt 1 - Noten eines Schülers

Die Noten eines Schülers kann man ganz leicht in einem Array speichern, der 10 Elemente umfasst:

import java.util.Random;

public class SNoten
{
    int[] noten;
    Random wuerfel;
    
    public SNoten()
    {
       noten = new int[10];
       wuerfel = new Random();
    }
    
    public void erzeugen()
    {
       for (int i=0; i<10; i++)
          noten[i] = wuerfel.nextInt(6)+1;
    }
    
    public void ausgeben()
    {
       for (int i=0; i<9; i++)
          System.out.print(noten[i] + " / "); 
       System.out.println(noten[9]); 
    }
}

Dieses Programm zeigt eine einfache Version der Notenverwaltung, die dem Lehrer zudem die mühsame Arbeit der Notenfindung erleichtert und auch das alte Gerücht bestätigt, dass die meisten Lehrer ihre Noten würfeln.

Das Programm verwaltet aber nur die Noten eines einzelnen Schülers. Wir wollen aber die Noten einer ganzen Klasse mit maximal 30 Schülern und Schülerinnen verwalten.

⇒ Testen Sie den obigen Quelltext. Kompilieren Sie das Projekt und erzeugen Sie dann ein Objekt der Klasse SNoten. Klicken Sie mit der rechten Maustaste auf den roten Kasten (Zeichnung) und wählen Sie aus dem Kontextmenü, welches dann erscheint, den Befehl erzeugen() und anschließend den Befehl ausgeben().

Schritt 2 - Noten einer ganzen Klasse

Grundidee:

Die Noten eines Schülers befinden sich in einem Array, der 10 int-Zahlen umfasst.

Wie kann man jetzt die Noten einer ganzen Klasse speichern, die aus maximal 32 Schülerinnen und Schülern besteht?

Hierzu gibt es zwie Möglichkeiten, die hier beide vorgestellt werden sollen.

Möglichkeit 1:

Wir erstellen einen neuen Array aus 32 Objekten der Klasse SNoten. Jedes Element dieses Arrays ist also selbst wieder ein Array. Im Endergebnis erhalten wir so eine Tabelle. Jede Zeile der Tabelle steht für einen Schüler oder eine Schülerin, jede Spalte der Tabelle für die Note in einem bestimmten Fach, zum Beispiel Informatik.

Implementation 1

Beschreibung

Möglichkeit 2:

Wir erstellen einen "echten" zweidimensionalen Array, der ebenfalls aus Zeilen und Spalten besteht.

Implementation 2

Beschreibung

Zweidimensionale Arrays

Die Möglichkeit 1 ist völlig in Ordnung, aber um einen "echten" zweidimensionalen Array handelt es sich hier nicht. Allerdings ist das Endergebnis dieser Implementation das gleiche wie bei der Implementation 2 mit einem "echten" zweidimensionalen Array. Im NRW-Abitur Informatik wurden schon beide Verfahren zur Implementation von Tabellen gesehen, man sollte also auch mit beiden Möglichkeiten vertraut sein. Im Folgenden wollen wir uns aber auf "echte" zweidimensionale Arrays konzentrieren.

Ähnlich wie bei "normalen" einfachen Arrays muss man hier zwischen der Deklaration und der Initialisierung unterscheiden. Als dritte Stufe kommt bei einem Array dann ja noch das Auffüllen mit den eigentlichen Werten dazu.

Deklaration
Deklaration eines zweidimensionalen Arrays
Syntax der Array-Initialisierung

datentyp[][] bezeichner;

Beispiele:

int[][] noten;

double[][] einnahmen;

Gegenstand[][] schrank;

Den Array noten haben wir ja gerade besprochen. Der Array einnahmen könnte zum Beispiel die Einnahmen eines Geschäfts für mehrere Jahre speichern. Jede Zeile steht dann für ein Jahr, jede Spalte für einen Monat. Der Array schrank könnte für einen Schrank stehen, der vier Reihen mit jeweils sechs Schubladen enthält, in denen sich Gegenstände befinden.

Die folgende erste Aufgabe verlangt von Ihnen, einen dreidimensionalen Array zu deklarieren. Das geht im Prinzip genau so wie bei der Deklaration eines zweidimensionalen Arrays, nur müssen Sie jetzt drei Paare von eckigen Klammern verwenden, je ein paar für eine Dimension.

Aufgabe 9.1-1

Deklarieren Sie einen dreidimensionalen Array, der folgendes repräsentiert:

In einem Lagerraum stehen mehrere Schubladenschränke (Dimension 1). Jeder Schubladenschrank hat mehrere Reihen von Schubladen (Dimension 2), in jeder Reihe befinden sich mehrere Schubladen (Dimension 3), und in jeder Schublade liegt ein Objekt der Klasse Gegenstand.

Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu

Initialisierung

Mit der Deklaration eines Arrays ist es aber nicht getan. Der Array muss auch noch initialisiert werden. Sonst weiß das Programm ja gar nicht, wie viele Elemente in dem Array gespeichert werden sollen. Das ist so, als würden Sie zu einem Tischler sagen: "Hallo, ich brauche einen Schubladenschrank", aber Sie geben nicht an, wie viele Reihen von Schubladen der Schrank enthalten soll und wie viele Schubladen sich in einer Reihe befinden sollen.

Initialisierung eines zweidimensionalen Arrays
Syntax der Array-Initialisierung

bezeichner = new Datentyp[AnzahlReihen][AnzahlSpalten];

Beispiele:

noten = new int[30][10];

einnahmen = new double[20][12];

schrank = new Gegenstand[4][12];

Jetzt erkennen wir also, dass der Array einnahmen die Einnahmen für 20 Jahre speichern soll, und zwar für jeden Monat. Der Array schrank repräsentiert einen breiten Schubladenschrank mit 4 Reihen mit je 12 Schubladen oder alternativ einen hohen Schrank mit 12 Reihen aus je 4 Schubladen.

Das Beispiel schrank zeigt, dass man auch von Objekten einer Klasse zweidimensionale Array anlegen kann. Die Schubladen des Schranks enthalten je ein Objekt der Klasse Gegenstand.

Aufgabe 9.1-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 Gegenstände enthalten (also Objekte der Klasse Gegenstand).
  2. Deklarieren und initialisieren Sie dann einen vierdimensionalen Array, der einen Lagerraum repräsentiert, der 10 solcher Schubladenschränke enthält.
  3. Deklarieren und initialisieren Sie schließlich einen fünfdimensionalen Array, der ein Lagerhaus repräsentiert, das 12 solcher Lagerräume enthält.

Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu

Das waren die beiden ersten Aufgaben zu dem Thema "zwei- bzw. mehrdimensionale Arrays".

Weitere Übungen

Auf dieser Seite finden Sie weitere Übungen zum Thema "Notenliste" und auch zu anderen Themen, die sich mit zwei- oder mehrdimensionalen Arrays beschäftigen.