erstellt 01.10.99; korrigiert 08.03.00; übersetzt 17.06.03; © Copyright 2003 Deutsche Übersetzung Heinrich Gailer


Kapitel 35 Programmieraufgaben

Diese Aufgaben gehen davon aus, dass Sie die Aufgabe, die im Rückblick dieses Kapitels behandelt wurde, gelesen haben. Alle Programmieraufgaben sind Modifikationen dieses Programms. Beginnen Sie, indem Sie dieses Programm nach Notepad kopieren.

Aufgabe 1 --- Interaktion mit dem Anwender.

Modifizieren Sie die PantryTester-Klasse, so dass sie einen Dialog mit dem Anwender ausführt:

Willkommen zu Mutter Hubbards Vorratskammer!

Die Marmeladen sind:
1: Gooseberry   7/4/86   12 fl. oz.
2: Crab Apple   9/30/99   8 fl. oz.
3: Rhubarb   10/31/99   16 fl. oz.
Treffen Sie Ihre Auswahl (1, 2 oder 3):
1
Geben Sie die Menge ein, die aufgetragen werden soll:
2
Auftragen von 2 fluessigen Unzen von Gooseberry

Die Marmeladen sind:
1: Gooseberry   7/4/86   10 fl. oz.
2: Crab Apple   9/30/99   8 fl. oz.
3: Rhubarb   10/31/99   16 fl. oz.
Treffen Sie Ihre Auswahl (1, 2 oder 3):
2
Geben Sie die Menge ein, die aufgetragen werden soll:
25
Auftragen von 8 fluessigen Unzen von Crab Apple

Die Marmeladen sind:
1: Gooseberry   7/4/86   10 fl. oz.
2: Crab Apple   9/30/99   0 fl. oz.
3: Rhubarb   10/31/99   16 fl. oz.
Treffen Sie Ihre Auswahl (1, 2 oder 3):
2
Geben Sie die Menge ein, die aufgetragen werden soll:
9
Keine Marmelade im Glas!

Die Marmeladen sind:
1: Gooseberry   7/4/86   10 fl. oz.
2: Crab Apple   9/30/99   0 fl. oz.
3: Rhubarb   10/31/99   16 fl. oz.
Treffen Sie Ihre Auswahl (1, 2 oder 3):
-1
Good-by

Das Programm sollte zuerst die Jams und die Pantry initialisieren, dann...

  1. Alle verfügbaren Jams auflisten.
  2. Den Anwender zur Eingabe auffordern.
  3. Die Auswahl einlesen.
  4. Eine Fehlermeldung für eine ungültige Auswahl ausgeben (und wieder von vorne anfangen).
  5. Den Anwender auffordern eine Aufstrichmenge für die Marmelade einzugeben.
  6. Die Menge der ausgewählten Marmelade um die Aufstrichmenge verringern.
  7. Das Programm beenden, wenn der Anwender jam -1 auswählt, ansonsten wieder von vorne anfangen.

Verwenden Sie die Jam und Pantry Klassen aus der Aufgabe im Rückblick. Um dies zu tun:

  1. Kopieren Sie den Code am Ende der Aufgabe nach Notepad, speichern und kompilieren ihn.
  2. Sie werden jetzt eine Jam.class, eine Pantry.class und eine PantryTester.class in Ihren Verzeichnis haben.
  3. Erzeugen Sie eine neue Datei, Aufgabe1.java, die den Anwenderdialog implementiert.
  4. Kompilieren und starten Sie Aufgabe1.java.

Aufgabe1.java wird folgendermaßen aussehen:


import java.io.*;

class Aufgabe1
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
    String inChars;

    Jam goose = new Jam( "Gooseberry", "7/4/86", 12 );
    Jam apple = new Jam( "Crab Apple", "9/30/99", 8 );
    Jam rhub  = new Jam( "Rhubarb", "10/31/99", 16 );

    . . . . . . . . . .

  }
}

Zurück zur Übersicht.


Aufgabe 2 --- Neue Konstruktoren für die Pantry-Klasse

Fügen Sie der Pantry-Klasse neue Konstruktoren hinzu: einen Konstruktor, der einen Jam-Parameter übernimmt und einen weiteren, der zwei Jam-Parameter übernimmt. Nicht verwendete Instanzvariablen des Pantry-Objekts werden auf null gesetzt.

Modifizieren Sie jetzt die Methoden der Klasse, so dass sie mit null in den Instanzvariablen umgehen können: print() überprüft auf null, bevor die Marmeladen ausgegeben werden. select() wird einen Rückgabetyp boolean haben. Geben Sie true zurück, wenn die Auswahl verfügbar ist, ansonsten false.

Hier ist die PantryTester2-Klasse, die den neuen Code vorführt:

class PantryTester2
{
  public static void main ( String[] args )
  {
    Jam goose = new Jam( "Gooseberry", "7/4/86", 12 );
    Jam apple = new Jam( "Crab Apple", "9/30/99", 8 );

    Pantry hubbard = new Pantry( goose, apple );
    hubbard.print();

    if ( hubbard.select(1) )
      hubbard.spread(2);
    else
      System.out.println("Auswahl nicht verfuegbar");
    hubbard.print();

    if ( hubbard.select(3) )
      hubbard.spread(2);
    else
      System.out.println("Auswahl nicht verfuegbar");
    hubbard.print();

  }
}

Wenn es läuft, gibt es folgendes aus:

1: Gooseberry   7/4/86   12 fl. oz.
2: Crab Apple   9/30/99   8 fl. oz.
Auftragen von 2 fluessigen Unzen von Gooseberry

1: Gooseberry   7/4/86   10 fl. oz.
2: Crab Apple   9/30/99   8 fl. oz.
Auswahl nicht verfuegbar

1: Gooseberry   7/4/86   10 fl. oz.
2: Crab Apple   9/30/99   8 fl. oz.

Natürlich, ein vollständiges Testen würde eine sehr viel größere PantryTester2 voraussetzen.

Zurück zur Übersicht.

Aufgabe 3 --- replace() Methode

Fügen Sie dem Programm aus Aufgabe 2 mehr Code hinzu. Schreiben Sie eine Methode replace( Jam j, int slot ) für die Pantry-Klasse, die ein bestimmtes Glas Marmelade aus der Vorratskammer durch das Objekt j ersetzt. Hier ist das Test-Programm:

class PantryTester3
{
  public static void main ( String[] args )
  {
    Jam goose = new Jam( "Gooseberry", "7/4/86", 12 );
    Jam apple = new Jam( "Crab Apple", "9/30/99", 8 );
    Jam rhub  = new Jam( "Rhubarb", "10/31/99", 16 );

    Pantry hubbard = new Pantry( goose, apple );
    hubbard.print();

    if ( hubbard.select(3) )
      hubbard.spread(2);
    else
      System.out.println("Auswahl nicht verfuegbar");
    hubbard.print();

    hubbard.replace( rhub, 3 );
    hubbard.print();

    if ( hubbard.select(3) )
      hubbard.spread(2);
    else
      System.out.println("Auswahl nicht verfuegbar");
    hubbard.print();

  }
}
Zurück zur Übersicht.

Aufgabe 4 --- gemischte Früchte (MixedFruit)

Fügen Sie der Pantry-Klasse eine Methode hinzu:

public void mixedFruit()

Diese Methode überprüft, ob jedes Marmeladenglas in der Vorratskammer 2 flüssige Unzen oder weniger hat und ersetzt, wenn dem so ist, das erste Marmeladenglas durch ein Glas gemischter Früchte. Die Menge ist die kombinierte Menge aller ursprünglicher Gläser. Die letzten zwei Gläser werden auf null gesetzt. (Mit anderen Worten, diese Methode mischt die Marmelade aller drei Gläser, um ein neues Glas zu erzeugen, das das alte ersetzt.) Modifizieren Sie das Test-Programm, um diese neue Methode zu verwenden. Hier ist ein beispielhafte Ausgabe eines Test-Programms:

1: Gooseberry   7/4/86   4 fl. oz.
2: Crab Apple   9/30/99   1 fl. oz.
3: Rhubarb   10/31/99   2 fl. oz.
Auftragen von 2 fluessigen Unzen von Gooseberry

1: Gooseberry   7/4/86   2 fl. oz.
2: Crab Apple   9/30/99   1 fl. oz.
3: Rhubarb   10/31/99   2 fl. oz.

1: Mixed Fruit   7/4/86   5 fl. oz.

Zurück zur Übersicht.


Ende der Aufgaben