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

Kapitel 48 Füllen Sie die Lücken aus

Diese Aufgabe wird Ihnen Übung im Schreiben von Methoden geben, die Dinge mit Arrays tun.

1.       Design der StudentGrades-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 StudentGrades-Objekt benötigt werden.

Überlegen Sie sich jetzt einige Methoden, die nützlich sind um sei 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
StudentGrades (  studentName );

Methoden

// Daten ausgeben
public void  

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

// Durchschnitt berechnen
public double  average()

// 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, indem Sie das tun.

class StudentTester
{

  public static void main ( String[] args )
  {
     // ein Objekt für einen Studenten erzeugen
     StudentGrades 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 mögen ein paar Zweifel haben, ob dies ein vernünftiges Programm ist. Vielleicht wäre es eine gute Idee die print() 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, welches 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 wie viele Slots verwendet sind. Slots werden in Reihenfolge verwendet, beginnend mit Index 0.

class StudentGrades
{
  final int ARRAYSIZE = 25;

  // Instanzvariablen
   name;
   grades ;
   gradeCount;

  // Konstruktoren

  // Methoden

}


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

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

  // Konstruktor
  StudentGrades( String studentName )
  {
    name =   ;
    grades =  int[ arraySize ] ;
    gradeCount =  ;
  }


  // Methoden

}


6.      Vervollständigen Sie die print() Methode.     Sie möchten nur die erste gradeCount-Zahl der Noten ausgeben. Sie möchten nicht jeden Slot des Arrays ausgeben (dies ist nicht wie in der print() Methode des Kapitels).

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

  // Konstruktor
  StudentGrades( String studentName )
  {
    name = studentName  ;
    grades =  new int[ ARRAYSIZE ] ;
    gradeCount =  0  ;
  }

  // Methoden

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

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

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

  }

}


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

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

  // Konstruktor
  StudentGrades( String studentName )
  {
    name = studentName  ;
    grades =  new int[ ARRAYSIZE ] ;
    gradeCount =  0  ;
  }

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

  public void addGrade ( int grade )
  {
    if ( gradeCount < ARRAYSIZE )
      grades[  ] = grade ;

     ++  ;

  }

}

Studieren Sie sorgfältig wie die Variable gradeCount arbeitet. Sei ist beides, die Zahl wie viele Arrayslots Daten haben und der Index des nächsten verfügbaren Slots. Dies ist ein gebräuchlicher Programmiertrick.



8.      Implementieren Sie die average() Methode.     Versichern Sie sich, dass sum mit null initialisiert wird. Addieren Sie dann die gradeCount Zahlen der Noten und dividieren sie sie durch gradeCount um den Durchschnitt zu bekommen.

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

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

  // Methoden
  public void print () { ..... }
  public void addGrade ( int grade ) { ..... }

  public double average ( )
  {
    double sum =   ;

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

       sum /  ;
  }

}


9.      Implementieren Sie die minimum() Methode.     Versichern Sie sich, dass Sie nur die gradeCount Zahlen der Noten betrachten.

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

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

  // Methoden
  public void print () { ..... }
  public void addGrade ( int grade ) { ..... }

  public double average ( )
  {
    double sum =  0  ;

    for ( int j=0; j < gradeCount; j++ )
      sum += grades[ j ] ;

    return   sum / gradeCount ;
  }

  public int minimum( )
  {
    int min =   ;

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

      if (   < min )
          min =   ;

    return  ;
  }

}


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

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

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

  // Methoden
  public void print () { ..... }
  public void addGrade ( int grade ) { ..... }

  public double average ( ) { ..... }

  public int maximum( )
  {
    int max =   ;

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

      if ( grades[j]  max )
          max =   ;

    return  ;
  }

}


Das gesamte Programm mit einer Klasse zum Testen:     Sie könnten vielleicht den Wunsch haben das Programm nach NotePad zu kopieren, es in eine Datei zu speichern und damit zu spielen.

class StudentGrades
{
  final int ARRAYSIZE = 25;

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

  // Konstruktor
  StudentGrades( String studentName )
  {
    name = studentName  ;
    grades =  new int[ ARRAYSIZE ] ;
    gradeCount =  0  ;
  }

  // Methoden

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

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

    for ( int j=0; j < gradeCount ; j++ )
      System.out.println ( "  grade " + j + ": " + grades[ j ] );

  }

  public void addGrade ( int grade )
  {
    if ( gradeCount < ARRAYSIZE )
      grades[gradeCount] = grade ;
    gradeCount ++ ;
  }

  public double average ( )
  {
    double sum =  0  ;

    for ( int j=0; j < gradeCount; j++ )
      sum += grades[ j ] ;

    return   sum / gradeCount ;
  }

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

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

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

    return min ;
  }

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

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

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

    return max ;
  }

}

class StudentTester
{

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

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

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

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

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