erstellt 01.10.99; überarbeitet 08.03.00; übersetzt 17.06.03; überarbeitet 10.02.04, 26.07.04, 18.01.05, 19.10.06; © Copyright 2003 - 2006 Deutsche Übersetzung Heinrich Gailer


Kapitel 35 Programmieraufgaben

Diese Aufgaben gehen davon aus, dass Sie die Aufgabe, die im Test 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 VorratskammerTester-Klasse, so dass sie einen Dialog mit dem Anwender durchführt:

Willkommen zu Mutter Hubbards Vorratskammer!

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade   04.07.01 12 Unzen.
2: Erdbeermarmelade   31.09.03   8 Unzen.
3: Aprikosenmarmelade   31.10.03   16 Unzen.
Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
1
Geben Sie die Menge ein, die aufgetragen werden soll:
2
Auftragen von 2 Unzen Stachelbeermarmelade.

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade   04.07.01   10 Unzen.
2: Erdbeermarmelade   31.09.03   8 Unzen.
3: Aprikosenmarmelade   31.10.03   16 Unzen.
Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
2
Geben Sie die Menge ein, die aufgetragen werden soll:
25
Auftragen von 8 Unzen Erdbeermarmelade.

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade   04.07.01   10 Unzen.
2: Erdbeermarmelade   31.09.03   0 Unzen.
3: Aprikosenmarmelade   31.10.03   16 Unzen.
Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
2
Geben Sie die Menge ein, die aufgetragen werden soll:
9
Keine Marmelade im Glas!

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade   04.07.01   10 Unzen.
2: Erdbeermarmelade   31.09.03   0 Unzen.
3: Aprikosenmarmelade   31.10.03   16 Unzen.
Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
-1
Good-bye

Das Programm sollte zuerst die Marmelade-Objekte und die Vorratskammer initialisieren und dann...

  1. Alle verfügbaren Marmelade-Objekte 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 bei der Auswahl -1 eingibt, ansonsten wieder von vorne anfangen.

Verwenden Sie die Marmelade- und Vorratskammer-Klasse aus der Aufgabe im Test . Um dies zu tun:

  1. Kopieren Sie den Code am Ende der Aufgabe nach Notepad, speichern und kompilieren ihn.
  2. Sie werden jetzt eine Marmelade.class, eine Vorratskammer.class und eine VorratskammerTester.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;

    Marmelade stachelbeer = new Marmelade( "Stachelbeer", "04.07.01", 12 );
    Marmelade erdbeer     = new Marmelade( "Erdbeer", "31.09.03", 8 );
    Marmelade aprikosen   = new Marmelade( "Aprikosen", "31.10.03", 16 );

    . . . . . . . . . .

  }
}

Zurück zum Inhaltsverzeichnis.


Aufgabe 2 — Neue Konstruktoren für die Vorratskammer-Klasse

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

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

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

class VorratskammerTester2
{
  public static void main ( String[] args )
  {
    Marmelade stachelbeer = new Marmelade( "Stachelbeer", "04.07.01", 12 );
    Marmelade erdbeer     = new Marmelade( "Erdbeer", "31.09.03", 8 );

    Vorratskammer vorrat = new Vorratskammer( stachelbeer, erdbeer );
    vorrat.ausgeben();

    if ( vorrat.auswaehlen(1) )
      vorrat.auftragen(2);
    else
      System.out.println("Auswahl nicht verfuegbar");
    vorrat.ausgeben();

    if ( vorrat.auswaehlen(3) )
      vorrat.auftragen(2);
    else
      System.out.println("Auswahl nicht verfuegbar");
    vorrat.ausgeben();

  }
}

Wenn das Programm läuft, gibt es folgendes aus:

1: Stachelbeer   04.07.01   12 Unzen.
2: Erdbeer   31.09.03   8 Unzen.
Auftragen von 2 Unzen Stachelbeere

1: Stachelbeer   04.07.01   10 Unzen.
2: Erdbeer   31.09.03   8 Unzen.
Auswahl nicht verfuegbar!

1: Stachelbeer   04.07.01   10 Unzen.
2: Erdbeer   31.09.03   8 Unzen.

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

Zurück zum Inhaltsverzeichnis.


Aufgabe 3 — ersetzen() Methode

Erweitern Sie das Programm aus Aufgabe 2. Schreiben Sie eine Methode ersetzen( Marmelade m, int slot ) für die Vorratskammer-Klasse, die ein bestimmtes Glas Marmelade aus der Vorratskammer durch das Objekt m ersetzt. Hier ist das Testprogramm:

class VorratskammerTester3
{
  public static void main ( String[] args )
  {
    Marmelade stachelbeer = new Marmelade( "Stachelbeer", "04.07.01", 12 );
    Marmelade erdbeer     = new Marmelade( "Erdbeer", "31.09.03", 8 );
    Marmelade aprikosen   = new Marmelade( "Aprikosen", "31.10.03", 16 );

    Vorratskammer vorrat  = new Vorratskammer( stachelbeer, erdbeer, aprikosen );
    vorrat.ausgeben();

    Marmelade kirsch      = new Marmelade( "Kirsch", "01.07.04", 11 );

    vorrat.ersetzen( kirsch, 3 );
    vorrat.ausgeben();

  }
}

Zurück zum Inhaltsverzeichnis.


Aufgabe 4 — gemischte Früchte

Fügen Sie der Vorratskammer-Klasse eine weitere Methode hinzu:

public void gemischteFruechte()

Diese Methode überprüft, ob jedes Marmeladenglas in der Vorratskammer 2 Unzen oder weniger hat und ersetzt, wenn dem so ist das erste Marmeladenglas durch ein Glas gemischter Früchte. Die Menge ergibt sich aus der kombinierten 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 die alten ersetzt.) Modifizieren Sie das Testprogramm, um diese neue Methode zu verwenden. Hier ist ein beispielhafte Ausgabe eines Testprogramms:

1: Stachelbeermarmelade   04.07.01   4 Unzen.
2: Erdbeermarmelade   30.09.03   1 Unzen.
3: Aprikosenmarmelade   31.10.03   2 Unzen.
Auftragen von 2 Unzen von Stachelbeermarmelade

1: Stachelbeermarmelade   04.07.01   2 Unzen.
2: Erdbeermarmelade   30.09.03   1 Unzen.
3: Aprikosenmarmelade   31.10.03   2 Unzen.

1: Gemischte Fruechte   27.07.04   5 Unzen.

Zurück zum Inhaltsverzeichnis.


Ende der Aufgaben.