erstellt 01.10.99; überarbeitet 08.03.00; übersetzt 17.06.03; überarbeitet 10.02.04, 18.01.05, 19.10.06, 17.01.11, 26.06.18, 11.12.18, 16.12.19, 05.12.21, 29.06.22, 27.03.23, 28.11.24; deutsche Übersetzung Heinrich Gailer


Kapitel 35 Programmieraufgaben

Diese Aufgaben gehen davon aus, dass Ihr die Aufgabe, die im Test dieses Kapitels behandelt wurde, gelesen habt. Alle Programmieraufgaben sind Modifikationen dieses Programms. Beginnen wir, indem wir die Klassen Marmelade und Vorratskammer in unsere Entwicklungsumgebung kopieren.

Aufgabe 1 — Interaktion mit dem Anwender.

Wir modifizieren die Klasse VorratskammerTester, so dass sie einen Dialog mit dem Anwender durchführt:

Willkommen zu Mutter Hubbards Vorratskammer!

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade 30.07.23 300 Gramm.
2: Erdbeermarmelade 15.06.23 250 Gramm.
3: Aprikosenmarmelade 02.07.23 200 Gramm.

Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
1
Geben Sie die Menge ein, die aufgetragen werden soll:
20
Auftragen von 20 Gramm Stachelbeermarmelade

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade 30.07.23 280 Gramm.
2: Erdbeermarmelade 15.06.23 250 Gramm.
3: Aprikosenmarmelade 02.07.23 200 Gramm.
Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
2
Geben Sie die Menge ein, die aufgetragen werden soll:
250
Auftragen von 250 Gramm Erdbeermarmelade

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade 30.07.23 280 Gramm.
2: Erdbeermarmelade 15.06.23 0 Gramm.
3: Aprikosenmarmelade 02.07.23 200 Gramm.
Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
2
Geben Sie die Menge ein, die aufgetragen werden soll:
20
Keine Marmelade im Glas!

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade 30.07.23 280 Gramm.
2: Erdbeermarmelade 15.06.23 0 Gramm.
3: Aprikosenmarmelade 02.07.23 200 Gramm.
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.

Wir verwenden die Marmelade-, Vorratskammer-und VorratskammerTester-Klasse aus dem Test. Wir kopieren das vollständiges Programm mit der Testklasse und testen es.

Zurück zum Inhaltsverzeichnis.


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

Wir fügen 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.

Wir modifizieren 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() überprüft auf null und wird einen Rückgabetyp boolean haben. Wir geben 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)
  {
    GlasMarmelade stachelbeer = new GlasMarmelade("Stachelbeer", "30.07.23", 300);
    GlasMarmelade erdbeer     = new GlasMarmelade("Erdbeer", "15.06.23", 250);

    Vorratskammer vorrat  = new Vorratskammer(stachelbeer, erdbeer);
    int glasNr, gramm;

    Scanner scan = new Scanner(System.in);

    System.out.println("Willkommen zu Mutter Hubbards Vorratskammer!");
    vorrat.ausgeben();
    System.out.println( vorrat.getAuswahl() );
    glasNr = scan.nextInt();

    while( glasNr != -1 )
    {
      if( vorrat.auswaehlen(glasNr) )
      {
        System.out.println(
          "Geben Sie die Menge ein, die aufgetragen werden soll:");
        gramm = scan.nextInt();
        vorrat.auftragen(gramm);
        vorrat.ausgeben();
      }
      else
      {
        System.out.println("Ungueltige Auswahl");
      }

      System.out.println( vorrat.getAuswahl() );
      glasNr = scan.nextInt();
    }
    System.out.println("Good-bye");
  }
}

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

Willkommen zu Mutter Hubbards Vorratskammer!

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade 30.07.23 300 Gramm.
2: Erdbeermarmelade 15.06.23 250 Gramm.

Treffen Sie Ihre Auswahl (1 oder 2). Exit -1:
1
Geben Sie die Menge ein, die aufgetragen werden soll:
20
Auftragen von 20 Gramm Stachelbeermarmelade

Die Vorratskammer enthaelt:
1: Stachelbeermarmelade 30.07.23 280 Gramm.
2: Erdbeermarmelade 15.06.23 250 Gramm.

Treffen Sie Ihre Auswahl (1 oder 2). Exit -1:
3
Ungueltige Auswahl

Treffen Sie Ihre Auswahl (1 oder 2). Exit -1:
-1
Good-bye

Zurück zum Inhaltsverzeichnis.


Aufgabe 3 — ersetzen() Methode

Wir erweitern das Programm aus Aufgabe 2. Wir schreiben 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 )
  {
    GlasMarmelade stachelbeer = new GlasMarmelade(
      "Stachelbeer", "30.07.23", 300);
    GlasMarmelade erdbeer     = new GlasMarmelade(
      "Erdbeer", "15.06.23", 250);
    GlasMarmelade aprikosen   = new GlasMarmelade(
      "Aprikosen", "02.07.23", 200);

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

    Marmelade kirsch      = new Marmelade( "Kirsch", "01.05.23", 250 );

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

  }
}

Zurück zum Inhaltsverzeichnis.


Aufgabe 4 — gemischte Früchte

Wir fügen der Vorratskammer-Klasse eine weitere Methode hinzu:

public void gemischteFruechte()

Diese Methode überprüft, ob jedes Marmeladenglas in der Vorratskammer 50 Gramm 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.) Wir modifizieren das Testprogramm, um diese neue Methode zu verwenden. Hier ist die beispielhafte Ausgabe eines Testprogramms:

run:
Willkommen zu Mutter Hubbards Vorratskammer!

Die Vorratskammer enthaelt:
1: Stachelbeer   30.07.23   100 Gramm.
2: Erdbeer   15.06.23   50 Gramm.
3: Aprikosen   02.07.23   35 Gramm.

Treffen Sie Ihre Auswahl (1, 2 oder 3). Exit -1:
1
Geben Sie die Menge ein, die aufgetragen werden soll:
50
Auftragen von 50 Gramm Stachelbeermarmelade

Die Vorratskammer enthaelt:
1: Stachelbeer   30.07.23   50 Gramm.
2: Erdbeer   15.06.23   50 Gramm.
3: Aprikosen   02.07.23   35 Gramm.

Die Vorratskammer enthaelt:
1: Gemischte Fruechte   19.11.24   135 Gramm.

Hinweis: Sobald die Methode gemischteFruechte() ihre Arbeit getan hat, beenden wir das Programm mit System.exit(0).

Zurück zum Inhaltsverzeichnis.


Ende der Aufgaben.