erstellt 25.11.99; überarbeitet 28.05.03; übersetzt 22.06.03; überarbeitet 14.02.05; © Copyright 2003 - 2005 Deutsche Übersetzung Heinrich Gailer

Kapitel 48 Füllen Sie die Lücken aus

Mit dieser Aufgabe üben das Schreiben von Methoden, die Dinge mit Arrays tun.

1.       Design der StudentNoten-Klasse.     Ein Objekt dieser Klasse repräsentiert die Noten eines einzelnen Studenten. Aus Gründen der Einfachheit nehmen wir an, dass alle Noten gleich zählen und, dass ein Student bis zu 25 davon haben kann.

Überlegen Sie sich drei Datenelemente, die für ein StudentNoten-Objekt benötigt werden.

Überlegen Sie sich jetzt einige Methoden, die nützlich sind, um sie auf eine Liste von Noten anzuwenden. Es ist fast immer eine gute Idee eine Möglichkeit zu haben sich die Daten eines Objekts ausgeben zu lassen, und es wird notwendig sein eine Note zu der Liste hinzuzufügen.


2.      Dokumentieren Sie die Klasse.     Füllen Sie jetzt die Dokumentation der Klasse aus:

class 

Eine Klasse, die die Noten für einen Studenten enthält.

Konstruktor

// Ein neu konstruiertes Objekt hat den Namen des Studenten, aber enthält keine Noten
StudentNoten (  studentName )

Methoden

// Daten ausgeben
public void  

// eine Note für diesen Studenten hinzufügen
public void  hinzufuegen 

// Durchschnitt berechnen
public double  durchschnitt()

// Minimum berechnen
public int 

// Maximum berechnen
public int 


3.      Design überprüfen.    Um das Design zu überprüfen, schreiben Sie ein kleines Programm, das die Klasse verwendet. Natürlich, das Programm kann nicht kompiliert werden bis die Klasse geschrieben ist, aber Sie bekommen ein Gefühl dafür, ob das Klassendesign vernünftig, in dem Sie das tun.

class StudentTester
{

  public static void main ( String[] args )
  {
     // ein Objekt für einen Studenten erzeugen
     StudentNoten stud = new  ( "Laura Lyons" ) ;

     // ein leeres Objekt ausgeben
     stud. ;

     // ein paar Noten hinzufügen: 90, 95, and 88
     stud. ;
     stud. ;
     stud. ;

     // das Objekt mit dessen neuen Daten ausgeben
     stud. ;

     // Durchschnitt berechnen und ausgeben
     System.out.println( "Durchschnittsnote: " + stud. ;

     }

  }
}

Sie könnten ein paar Zweifel haben, ob das ein vernünftiges Programm ist. Vielleicht wäre es eine gute Idee die ausgeben() Methode eine Mitteilung ausgeben zu lassen, jedes Mal wenn sie verwendet wird.



4.      Füllen Sie die Instanzvariablen aus.    Füllen Sie den Datentyp für jede Instanzvariable aus. Die Noten werden in einem Integerarray aufbewahrt, das Platz für 25 Zahlen hat. Konstruieren Sie das Array noch nicht. Es wird ebenfalls eine Instanzvariable geben, die zählt wie viele Slots des Arrays Daten enthalten.

Mögliche Unklarheit:     Die Länge des Arrays ist die Anzahl seiner Slots. In diesem Programm werden nicht alle Slots mit Noten gefüllt werden, also brauchen wir einen Zahl für die Anzahl der verwendeten Slots. Slots werden in ihrer Reihenfolge verwendet und beginnen mit dem Index 0.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
   name;
   arrNoten ;
   anzahlNoten;

  // Konstruktoren

  // Methoden

}


5.      Vervollständigen Sie den Konstruktor.    Der Konstruktor wird die Instanzvariablen des zu konstruierenden Objekts initialisieren.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;      // das Array mit den Noten
  int    anzahlNoten;   // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName )
  {
    name        =   ;
    arrNoten    =  int[ ARRAYLAENGE ] ;
    anzahlNoten =  ;
  }


  // Methoden

}


6.      Vervollständigen Sie die ausgeben() Methode.     Sie möchten nicht jeden Slot des Arrays ausgeben (das ist nicht wie in der ausgeben() Methode dieses Kapitels), sondern nur die tatsächliche Anzahl der Noten.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;      // das Array mit den Noten
  int    anzahlNoten;   // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName )
  {
    name = studentName  ;
    arrNoten =  new int[ ARRAYLAENGE ] ;
    anzahlNoten =  0  ;
  }

  // Methoden

  public void ausgeben ()
  {
    System.out.println ( "Name: " +  );

    System.out.println( "Noten:");

    for ( int j=0; j <  ; j++ )
      System.out.println ( "  Note " + j + ": " + arrNoten[ ] );

  }

}


7.      Implementieren Sie die hinzufuegen() Methode.     Diese Methode wird eine Note (Integer) zur Liste der Noten für den Studenten hinzufügen. Stellen Sie sicher, dass Sie anzahlNoten erhöhen.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;        // das Array mit den Noten
  int    anzahlNoten;    // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName )
  {
    name = studentName  ;
    arrNoten =  new int[ ARRAYLAENGE ] ;
    anzahlNoten =  0  ;
  }

  // Methoden
  public void ausgeben () { ..... }

  public void hinzufuegen ( int note )
  {
    if ( anzahlNoten < ARRAYLAENGE )
      arrNoten[  ] = note ;

     ++  ;

  }

}

Studieren Sie sorgfältig wie die Variable anzahlNoten arbeitet. Sie enthält sowohl die Anzahl der Arrayslots, die Daten enthalten, als auch den Index des nächsten verfügbaren Slots. Dies ist ein gebräuchlicher Programmiertrick.



8.      Implementieren Sie die durchschnitt() Methode.     Versichern Sie sich, dass summe mit 0 initialisiert wird. Addieren Sie dann die Zahlen der Noten und dividieren Sie sie durch anzahlNoten, um den Durchschnitt zu bekommen.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;        // das Array mit den Noten
  int    anzahlNoten;    // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName ) { .... }

  // Methoden
  public void ausgeben () { ..... }
  public void hinzufuegen ( int note ) { ..... }

  public double durchschnitt ( )
  {
    double summe =   ;

    for ( int j=0; j <  ; j++ )
      summe +=  [ j ] ;

       summe /  ;
  }

}


9.      Implementieren Sie die minimum() Methode.     Versichern Sie sich, dass Sie nur die tatsächliche Anzahl der Noten berücksichtigen.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;      // das Array mit den Noten
  int    anzahlNoten;   // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName ) { .... }

  // Methoden
  public void ausgeben () { ..... }
  public void hinzufuegen ( int note ) { ..... }

  public double durchschnitt ( )
  {
    double summe =  0  ;

    for ( int j=0; j < anzahlNoten; j++ )
      summe += arrNoten[ j ] ;

    return   summe / anzahlNoten ;
  }

  public int minimum( )
  {
    int min =   ;

    for ( int j=0; j <  ; j++ )

      if (   < min )
          min =   ;

    return  ;
  }

}


10.      Implementieren Sie die maximum() Methode.     Das wird fast die gleiche wie die minimum() Methode werden.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;      // das Array mit den Noten
  int    anzahlNoten;   // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName ) { .... }

  // Methoden
  public void ausgeben () { ..... }
  public void hinzufuegen ( int note ) { ..... }

  public double durchschnitt ( ) { ..... }

  public int maximum( )
  {
    int max =   ;

    for ( int j=0; j <  ; j++ )

      if ( arrNoten[j]  max )
          max =   ;

    return  ;
  }

}


Das gesamte Programm mit einer Klasse zum Testen:     Sie haben vielleicht den Wunsch das Programm nach NotePad zu kopieren, es zu speichern und damit zu experimentieren.

class StudentNoten
{
  final int ARRAYLAENGE = 25;

  // Instanzvariablen
  String name;          // der Name des Studenten
  int[]  arrNoten;      // das Array mit den Noten
  int    anzahlNoten;   // wie viele Slots Daten enthalten

  // Konstruktor
  StudentNoten( String studentName )
  {
    name = studentName  ;
    arrNoten =  new int[ ARRAYLAENGE ] ;
    anzahlNoten =  0  ;
  }

  // Methoden

  public void ausgeben ()
  {
    System.out.println ( "Name: " + name  );

    System.out.println( "Noten:");

    for ( int j=0; j < anzahlNoten ; j++ )
      System.out.println ( "  note " + j + ": " + arrNoten[ j ] );

  }

  public void hinzufuegen ( int note )
  {
    if ( anzahlNoten < ARRAYLAENGE )
      arrNoten[anzahlNoten] = note ;
    anzahlNoten ++ ;
  }

  public double durchschnitt ( )
  {
    double summe =  0  ;

    for ( int j=0; j < anzahlNoten; j++ )
      summe += arrNoten[ j ] ;

    return   summe / anzahlNoten ;
  }

  public int minimum( )
  {
    int min = arrNoten[ 0 ] ;

    for ( int j=0; j < anzahlNoten; j++ )

      if ( arrNoten[j] < min )
        min = arrNoten[j] ;

    return min ;
  }

  public int maximum( )
  {
    int max = arrNoten[ 0 ] ;

    for ( int j=0; j < anzahlNoten; j++ )

      if ( arrNoten[j] > max )
        max = arrNoten[j] ;

    return max ;
  }

}

class StudentTester
{

  public static void main ( String[] args )
  {
     // ein Objekt Student erzeugen
     StudentNoten stud = new StudentNoten( "Laura Lyons" ) ;

     // ein paar Noten hinzufügen
     stud.hinzufuegen( 90 ) ;
     stud.hinzufuegen( 95 ) ;
     stud.hinzufuegen( 88 ) ;
     stud.hinzufuegen( 78 ) ;
     stud.hinzufuegen( 82 ) ;
     stud.hinzufuegen( 97 ) ;

     // das Objekt mit den neuen Daten ausgeben
     stud.ausgeben() ;

     // Durchschnitt, Minimum und Maximum berechnen und ausgeben
     System.out.println( "Durchschnittsnote: " + stud.durchschnitt() + " Minimum: " + stud.minimum() +
         " Maximum: " + stud.maximum() );
     }
}

Ende der Übung. Wenn Sie sie wiederholen möchten, klicken Sie in Ihrem Browser auf "Aktualisieren".

Zurück zum Inhaltsverzeichnis.