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; Deutsche Übersetzung Heinrich Gailer
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.
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 16.06.22 300 Gramm. 2: Erdbeermarmelade 30.07.22 250 Gramm. 3: Aprikosenmarmelade 02.09.21 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 16.06.22 280 Gramm. 2: Erdbeermarmelade 30.07.22 250 Gramm. 3: Aprikosenmarmelade 02.09.21 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 16.06.22 280 Gramm. 2: Erdbeermarmelade 30.07.22 0 Gramm. 3: Aprikosenmarmelade 02.09.21 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 16.06.22 280 Gramm. 2: Erdbeermarmelade 30.07.22 0 Gramm. 3: Aprikosenmarmelade 02.09.21 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:
Marmelade
-Objekte auflisten.
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.
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 ) { Marmelade stachelbeer = new Marmelade( "Stachelbeer", "15.06.22", 300 ); Marmelade erdbeer = new Marmelade( "Erdbeer", "30.07.22", 250 ); Vorratskammer vorrat = new Vorratskammer( stachelbeer, erdbeer ); vorrat.ausgeben(); if ( vorrat.auswaehlen(1) ) vorrat.auftragen(20); else System.out.println("Auswahl nicht verfuegbar"); vorrat.ausgeben(); if ( vorrat.auswaehlen(3) ) vorrat.auftragen(30); else System.out.println("Auswahl nicht verfuegbar"); vorrat.ausgeben(); } }
Wenn das Programm läuft, gibt es ungefähr folgendes aus:
Willkommen zu Mutter Hubbards Vorratskammer! Die Vorratskammer enthaelt: 1: Stachelbeermarmelade 15.06.22 300 Gramm. 2: Erdbeermarmelade 30.07.22 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 15.06.22 280 Gramm. 2: Erdbeermarmelade 30.07.22 250 Gramm. Treffen Sie Ihre Auswahl (1 oder 2). Exit -1: 3 Ungueltige Auswahl Treffen Sie Ihre Auswahl (1 oder 2). Exit -1:
Natürlich, ein vollständiges Testen würde eine sehr viel größere VorratskammerTester2
-Klasse voraussetzen.
Zurück zum Inhaltsverzeichnis.
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 ) { Marmelade stachelbeer = new Marmelade( "Stachelbeer", "15.06.22", 300 ); Marmelade erdbeer = new Marmelade( "Erdbeer", "30.07.22", 250 ); Marmelade aprikosen = new Marmelade( "Aprikosen", "02.09.21", 200 ); Vorratskammer vorrat = new Vorratskammer( stachelbeer, erdbeer, aprikosen ); vorrat.ausgeben(); Marmelade kirsch = new Marmelade( "Kirsch", "01.05.22", 250 ); vorrat.ersetzen( kirsch, 3 ); vorrat.ausgeben(); } }
Zurück zum Inhaltsverzeichnis.
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:
Willkommen zu Mutter Hubbards Vorratskammer! Die Vorratskammer enthaelt: 1: Stachelbeermarmelade 16.06.22 100 Gramm. 2: Erdbeermarmelade 30.07.22 50 Gramm. 3: Aprikosenmarmelade 02.09.21 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: Stachelbeermarmelade 16.06.22 50 Gramm. 2: Erdbeermarmelade 30.07.22 50 Gramm. 3: Aprikosenmarmelade 02.09.21 35 Gramm. Die Vorratskammer enthaelt: 1: Gemischte Fruechte 19.01.23 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.