Hey, ich bin derzeit dabei mich durch die Themen auf gailer-net.de durchzuarbeiten. Ich bin jetzt bei den Aufgaben in Kapitel 35 angekommen und habe damit ein Problem.
Folgendes ist die Aufgabe : Modifizieren Sie die VorratskammerTester-Klasse, so dass sie einen Dialog mit dem Anwender durchführt.
Das Programm sollte zuerst die Marmelade-Objekte und die Vorratskammer initialisieren und dann:
Meine Veränderungen in der VorratskammerTEster- Klasse sehen so aus:
Mit diesen Veränderungen schaffe ich es zwar, dass es bei einer Eingabe von 1,2 oder 3 auch nach der Menge frägt, jedoch springt es gleich wieder zum Anfang des Programms zurück, ohne ausgegeben zu haben, wie viel aufgetragen wurde. Ebenfalls passiert dies bei einer falschen Eingabe, dass Programm startet sofort neu, ohne ausgegeben zu haben, dass es sich um eine falsche Eingabe handelt. Die Eingabe "-1" funktioniert ohne Probleme.
Kann mir vielleicht jemand dabei helfen, was ich falsch gemacht habe? Danke im voraus
Folgendes ist die Aufgabe : Modifizieren Sie die VorratskammerTester-Klasse, so dass sie einen Dialog mit dem Anwender durchführt.
Das Programm sollte zuerst die Marmelade-Objekte und die Vorratskammer initialisieren und dann:
- Alle verfügbaren Marmelade-Objekte auflisten.
- Den Anwender zur Eingabe auffordern.
- Die Auswahl einlesen.
- Eine Fehlermeldung für eine ungültige Auswahl ausgeben (und wieder von vorne anfangen).
- Den Anwender auffordern eine Aufstrichmenge für die Marmelade einzugeben.
- Die Menge der ausgewählten Marmelade, um die Aufstrichmenge verringern.
- Das Programm beenden, wenn der Anwender bei der Auswahl -1 eingibt, ansonsten wieder von vorne anfangen.
Java:
class Marmelade
{
// Instanzvariablen
private String inhalt; // Art der Frucht im Glas
private String datum; // Datum des Abfüllens
private int menge; // Menge der Marmelade im Glas
// Konstruktor
public Marmelade( String inhalt, String datum, int menge )
{
this . inhalt = inhalt;
this . datum = datum;
this . menge = menge;
}
// Methoden
public boolean istLeer()
{
return ( menge == 0 );
}
public void ausgeben()
{
System.out.println ( inhalt + " " + datum + " " + menge + " Unzen." );
}
public void auftragen ( int unzen)
{
if ( !istLeer() )
{
if ( unzen <= menge )
{
System.out.println("Auftragen von " + unzen + " Unzen "
+ inhalt );
menge = menge - unzen;
}
else
{
System.out.println("Auftragen von " + menge + " Unzen "
+ inhalt );
menge = 0;
}
}
else
System.out.println("Keine Marmelade im Glas!");
}
}
class Vorratskammer
{
// Instanzvariablen
private Marmelade glas1;
private Marmelade glas2;
private Marmelade glas3;
private Marmelade glasAusgewaehlt;
// Konstruktor
public Vorratskammer( Marmelade glas1, Marmelade glas2, Marmelade glas3 )
{
this . glas1 = glas1;
this . glas2 = glas2;
this . glas3 = glas3;
glasAusgewaehlt = null;
}
// Methoden
public void ausgeben()
{
System.out.print("1: "); glas1 . ausgeben();
System.out.print("2: "); glas2 . ausgeben();
System.out.print("3: "); glas3 . ausgeben();
}
// wir setzen voraus, dass der Anwender eine richtige Auswahl trifft, 1, 2, oder 3
public void auswaehlen( int glasNummer )
{
if ( glasNummer == 1 )
glasAusgewaehlt = glas1;
else if ( glasNummer == 2 )
glasAusgewaehlt = glas2;
else
glasAusgewaehlt = glas3;
}
// Auftragen der ausgewählten Marmelade
public void auftragen( int unzen )
{
glasAusgewaehlt . auftragen( unzen );
}
}
class VorratskammerTester
{
public static void main ( String[] args )
{
Marmelade stachelbeer = new Marmelade( "Stachelbeer", "04.07.09", 12 );
Marmelade erdbeer = new Marmelade( "Erdbeer", "30.09.10", 8 );
Marmelade aprikosen = new Marmelade( "Aprikosen", "31.10.10", 3 );
Vorratskammer vorrat = new Vorratskammer( stachelbeer, erdbeer, aprikosen );
vorrat.ausgeben();
vorrat.auswaehlen(1);
vorrat.auftragen(2);
vorrat.ausgeben();
vorrat.auswaehlen(3);
vorrat.auftragen(4);
vorrat.ausgeben();
}
}
Meine Veränderungen in der VorratskammerTEster- Klasse sehen so aus:
Java:
import java.util.Scanner;
class VorratskammerTester{
public static void main ( String[] args ){
Scanner input = new Scanner(System.in);
boolean run = true;
do {
Marmelade stachelbeer = new Marmelade( "Stachelbeer", "04.07.09", 12 );
Marmelade erdbeer = new Marmelade( "Erdbeer", "30.09.10", 8 );
Marmelade aprikosen = new Marmelade( "Aprikosen", "31.10.10", 3 );
Vorratskammer vorratskammer = new Vorratskammer(stachelbeer, erdbeer, aprikosen);
System.out.println("Willkommen zur Vorratskammer!");
System.out.println("\nDie Vorratskammer enthält:");
Vorratskammer vorrat = new Vorratskammer( stachelbeer, erdbeer, aprikosen );
vorrat.ausgeben();
System.out.println("Treffen Sie ihre Auswahl (1, 2 oder 3), Exit: -1.");
String action = input.next();
switch(action) {
case "1":
int glasNummer = Integer.parseInt(action);
vorratskammer.auswaehlen(glasNummer);
System.out.println("Geben Sie die Menge ein, die aufgetragen werden soll:");
int unzen = input.nextInt();
vorratskammer.auftragen(unzen);
break;
case "2":
int glasNummer2 = Integer.parseInt(action);
vorratskammer.auswaehlen(glasNummer2);
System.out.println("Geben Sie die Menge ein, die aufgetragen werden soll:");
int unzen2 = input.nextInt();
vorratskammer.auftragen(unzen2);
break;
case "3":
int glasNummer3 = Integer.parseInt(action);
vorratskammer.auswaehlen(glasNummer3);
System.out.println("Geben Sie die Menge ein, die aufgetragen werden soll:");
int unzen3 = input.nextInt();
vorratskammer.auftragen(unzen3);
break;
case "-1":
run = false;
break;
default:
System.out.println("Sie haben eine ungültige Eingabe betätigt.\n");
}} while(run == true);
if(run==false) {
System.out.println("Good-bye!");
}
input.close();
}
}
Mit diesen Veränderungen schaffe ich es zwar, dass es bei einer Eingabe von 1,2 oder 3 auch nach der Menge frägt, jedoch springt es gleich wieder zum Anfang des Programms zurück, ohne ausgegeben zu haben, wie viel aufgetragen wurde. Ebenfalls passiert dies bei einer falschen Eingabe, dass Programm startet sofort neu, ohne ausgegeben zu haben, dass es sich um eine falsche Eingabe handelt. Die Eingabe "-1" funktioniert ohne Probleme.
Kann mir vielleicht jemand dabei helfen, was ich falsch gemacht habe? Danke im voraus