Home > Informatik > Stufe EF > 9. zweidimensionale Arrays > 9.1 Notenliste

9.1.1 Ein Array mit Array-Objekten

Implementation 1 - Implementation 2 - Übungen

Ein Array aus Objekten der Klasse SNoten

Hier eine mögliche Implementation.

public class KNoten
{
    SNoten[] notenliste = new SNoten[30];
    
    public KNoten()
    {
        for (int s = 0; s < 30; s++)
           notenliste[s] = new SNoten();
    }
    
    public void erzeugen()
    {
        for (int s = 0; s < 30; s++)
           notenliste[s].erzeugen();
    }
    
    public void ausgeben()
    {
        for (int s = 0; s < 30; s++)
        {
            if (s < 10) 
               System.out.print("Noten fuer Schueler Nr.  " +  s + ": ");
            else
               System.out.print("Noten fuer Schueler Nr. " +  s + ": ");
            notenliste[s].ausgeben();
        }
    }
}

Im Konstruktor wird ein Array namens notenliste initialisiert, der aus 30 Objekten der Klasse SNoten besteht:

    public KNoten()
    {
        for (int s = 0; s < 30; s++)
           notenliste[s] = new SNoten();
    }

Die SNoten-Objekte selbst sind wiederum Arrays aus 10 int-Zahlen. Für jedes Arrayelement von notenliste muss jetzt der Konstruktor der Klasse SNoten aufgerufen werden. Allerdings sind die 30 "kleinen" Arrays noch nicht mit "echten" Noten gefüllt, sondern mit den default-Werten, also mit Nullen. Davon kann man sich selbst überzeugen, wenn man einen Blick auf den Objektinspektor wirf:

⇒ Testen Sie den neuen Quelltext. Kompilieren Sie das Projekt und erzeugen Sie dann ein Objekt der Klasse KNoten. Klicken Sie mit der rechten Maustaste auf den roten Objektkasten und wählen Sie dann den Befehl ausgeben().

Es werden jetzt 30 Zeilen mit je 10 Nullen ausgegeben:

Die Konsolenausgabe, wenn zuvor nicht erzeugen() angewählt wurde.

Achten Sie auf die Linksbündigkeit der Schülernummern. Diese wurde nicht mit Hilfe eines Tabulators erreicht, sondern mit einer einfachen Fallunterscheidung. Bei einstelligen Nummern ( < 10) wurde einfach ein zusätzliches Leerzeichen vor die Nummer gesetzt.

Wenn Sie nun mit der rechten Maustaste die Methode erzeugen() aufrufen, wird in einer for-Schleife für jedes der 30 SNnoten-Objekte die Methode erzeugen() aufgerufen.

    public void erzeugen()
    {
        for (int s = 0; s < 30; s++)
           notenliste[s].erzeugen();
    }

Ein anschließender Aufruf von ausgeben() führt dann zu einer sinnvollen Ausgabe:

Die Konsolenausgabe, wenn vorher erzeugen() aufgerufen wurde.

Wir wollen unser Kontrukt aus den zwei verschachtelten Arrays noch einmal graphisch darstellen.

Graphische Darstellung der Klasse KNoten
Autor: Ulrich Helmich 2021, Lizenz: siehe Seitenende

Die Klasse KNoten erzeugt Objekte, die aus 30 Objekten der Klasse SNoten bestehen.

Aufgabe

Wie müsste man vorgehen, wenn man beispielsweise die 6. Note des Schülers mit der Nummer 12 aus der Notentabelle "extrahieren" wollte?

Der entsprechende Aufruf wäre dann folgender.

System.out.print("Note 6 von Schueler Nr. 12 : ");
System.out.println(notenliste[12].noten[5]);

Zunächst muss die richtige Notenliste gewählt werden. Für den Schüler oder die Schülerin mit der Nr. 12 ist das die Notenliste mit dem Index 12.

Achten Sie genau auf die Formulierungen: "Der zwölfte Schüler" hat den Index 11, aber "Der Schüler mit der Nr. 12" hat den Index 12, weil Nummer = Index. Achten Sie immer darauf, dass das erste Element eines Arrays stets den Index 0 hat.

Daher hat die sechste Note in dieser Liste den Index 5

Seitenanfang -
Zurück zur Hauptseite 9.1 Notenliste ...
Weiter mit Implementation 2 ...