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();
		 
       erzeugen();
       ausgeben();
    }
    
    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.

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.

Möglichkeit 2:

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

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;

Das Array noten haben wir ja gerade besprochen. Das 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. Das 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, ein dreidimensionales 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 ein dreidimensionales Array, das 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. Das 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 das Array einnahmen die Einnahmen für 20 Jahre speichern soll, und zwar für jeden Monat. Das 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 ist ein weiteres Beispiel für ein echtes zweidimensionales Array, ähnlich wie die Notenliste aus dem Einführungsbeispiel. Die Schubladen des Schranks enthalten je ein Objekt der Klasse Gegenstand.

Aufgabe 9.1-2

  1. Deklarieren und initialisieren Sie ein dreidimensionales Array, das 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 ein vierdimensionales Array, das einen Lagerraum repräsentiert, der 10 solcher Schubladenschränke enthält.
  3. Deklarieren und initialisieren Sie schließlich ein fünfdimensionales Array, das ein Lagerhaus repräsentiert, welches 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.