Ticketautomat in Java umprogrammieren

infinityfan

Mitglied
Hi Leute, habe im Studium gerade begonnen Java zu lernen. Evt. kennt jemand die Entwicklungsumgebung "BlueJ". Wir arbeiten im momentanen Semester damit und steigen nachher auf eclips um.
Jetzt haben wir einen Ticketautomaten vorgegeben, der mit Cent`s arbeitet, sprich:
- Ticketpreis eingeben
- bisher bezahlt ausgibt
- Ticket drucken kann
- preis des Tickets ausgibt
- und natürlich kann man Geld einwerfen
Bisher haben wir nur mit int Werten gearbeitet, jetzt haben wir aber übers WE die Aufgabe bekommen den Quelltext so umzuschreiben, dass er mit Euro und Cent arbeitet bzw. Franken und Rappen.
Einen grossen Teil habe ich schon umgeschrieben, z.B. Eingabe von zwei Werten für Franken und Rappen. Jedoch kriege ichs nicht hin, dass mir der Automat vernünftig was ausgibt.

Hier mal der Quelltext:
Java:
/**
* Die Klasse Ticketautomat modelliert einfache Ticketautomaten,
* die Tickets zu einem Einheitspreis herausgeben.
* Der Preis f¸r die Tickets eines Automaten kann ¸ber den Konstruktor
* festgelegt werden.
* Ticketautomaten dieser Klasse pr¸fen, ob sinnvolle Geldbetr‰ge
* eingeworfen werden, und drucken ein Ticket nur dann, wenn
* ausreichend Geld eingeworfen wurde.
*
* @author David J. Barnes und Michael Kˆlling
* @version 2008.03.30
*/


public class Ticketautomat
{
// Der Preis eines Tickets dieses Automaten.
private int preis;//Modifizierer; Datentyp; Bezeichung
// Der Betrag, der bisher vom Automatenbenutzer eingeworfen wurde.
private int bisherGezahlt;
// Die Geldsumme, die bisher von diesem Automaten eingenommen wurde.
private int gesamtsumme;
private int Rappen;
private int Franken;
/**
* Erzeuge einen Automaten, der Tickets zum angegebenen Preis
* (in Franken und Rappen) ausgibt.
*/
public Ticketautomat(int Franken, int Rappen)
{//Konstruktor
preis = Franken + Rappen;
bisherGezahlt = 0;
gesamtsumme = 0;
}

/**Anfang der 1. Methode
* Liefere den Preis eines Tickets dieses Automaten (in Cent).Return ist nicht gleich System.out.println()!
*/
public void gibPreis()
{
System.out.println("Der Preis beträgt:" + Franken +" Franken und " + Rappen +" Rappen");
}

/**Beginn der 2. Methode
* Liefere die Hoehe des Betrags, der fuer das naechste Ticket bereits
* eingeworfen wurde.
*/
public int gibBisherGezahltenBetrag()
{
return bisherGezahlt;//Rückgabeanweisung "return" von bisherGezahlt;, liefert einen ganzzahligen Wert
}//Ende der 2.Methode

/**Begin der 3. Methode (modifizierende Methode)
* Nimm den angegebenen Betrag (in Franken und Rappen) als Anzahlung fuer das 
* n‰chste Ticket. Pr¸fe, ob der Betrag sinnvoll ist.
*/
public void geldEinwerfen(int Franken, int Rappen)//modifizierende Methode, am Parameter erkennbar
{
if (Franken >= 0) {// bedingte Anweisung; true oder false
bisherGezahlt+=Franken + Rappen; //bisherGezahlt = bisherGezahlt + betrag;//

}
else {
System.out.println("Bitte nur positive Betraege verwenden: "//Betrag hat int Wert; Fehlermeldung wird ausgegeben....
+ Franken + Rappen);
}
}

/**
* Drucke ein Ticket, wenn gen¸gend Geld eingeworfen wurde, und 
* ziehe den Ticketpreis vom bisher gezahlten Betrag ab. Gib eine 
* Fehlermeldung aus, falls noch Geld f¸r ein Ticket fehlt.
*/
public void ticketDrucken() //modifizierende Methode
{

if (bisherGezahlt >= preis) {
// Den Ausdruck eines Tickets simulieren.
System.out.println("##################");
System.out.println("# Die BlueJ-Linie");
System.out.println("# Ticket");
System.out.println("#" + Franken +" Franken");
System.out.println("#" + Rappen +" Rappen");
System.out.println("##################");
System.out.println();

// Die Gesamtsumme um den Ticketpreis erhˆhen.
gesamtsumme = gesamtsumme + preis;
// Den Preis von der bisherigen Bezahlung abziehen.
bisherGezahlt = bisherGezahlt - preis;
}
else {
System.out.println("Sie m¸ssen noch mindestens " +
(preis - bisherGezahlt) +
" Franken einwerfen.");


}

}



/**
* Gib das Wechselgeld bzw. den bisher gezahlten Betrag zur¸ck.
*/
public int wechselgeldAuszahlen()
{
int wechselgeld = bisherGezahlt; //lokale Variable (Hilfsvariable); nur in der Methode wirksam; wird nachher wieder verworfen
bisherGezahlt = 0; //setzt bisherGezahlt auf 0 zurück
return wechselgeld; //gibt Wert von wechselgeld zurück, nicht im Textfeld
}
}

Hoffe ihr könnt mir bei meinem Problem weiterhelfen, bin leider noch n blutiger Anfänger in sachen Java . Danke schonmal für euren Rat.
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Ist das:

icon4.gif
Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben: [code=Java]hier Java Code einfügen[/ JAVA][/COLOR][/SIZE]

wirklich so schwer zu übersehen? :noe:

Und was ist jetzt genau dein Problem? Wie testest du überhaupt den Code (mit welchen Werten fütterst du deinen Automaten, was erhältst du als Ergebnis, was ist dein erwartetes Ergebnis etc.), eine main-Methode ist dort ja nicht vorhanden.
 

infinityfan

Mitglied
Oh Mist, sorry hab ich völlig vergessen, das in n Java-Tag zu schreiben.
Nehmen wir mal an, ich gebe beim Erstellen des Automaten in BlueJ einen Ticketpreis von 5 Franken und 40 Rappen ein. Die Zuweisung der Werte sollte doch eig. soweit ok sein. Also Zahle ich naher mit "geldEinwerfen" die 5 Franken und 40 Rappen ein. Wenn ich dann die Methode "ticketDrucken" aufrufe bekomme ich:

##################
# Die BlueJ-Linie
# Ticket
#0 Franken
#0 Rappen
##################

Es sollten aber nicht 0 Franken und 0 Rappen dastehen, sondern die 5 Franken 40 Rappen^^.
 

T7V

Aktives Mitglied
So nebenbei: Du hast zwei int rappen und franken.
Im konstruktor addierst du beide zum preis.
Bsp:
Franken =5
Rappen =40
Dann ist dein Preis 45


Edit: Du kannst dann auck 40 Frankrn und 5Rappen einzahlen. Es wäre sinnvoll die Franken immer gleich in Rappen umzurechnen.
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Du rechnest das eingeworfene Geld immer nur zusammen, aber speicherst nie die Franken und Rappen in den entsprechenden Membervariablen, sodass diese immer 0 bleiben.

In der Methode, wo du das geld einwirfst, könntest du hinzufügen:
Java:
this.Franken = Franken;


Variablennamen schreibt man normalerweise übrigends immer klein ;)
 

W9ND3R

Aktives Mitglied
Kann es nicht, weil deine Methode
Code:
ticketDrucken()
die Werte nicht kennt, die du dem Konstruktor übergibst. Du deklarierst ganz oben die Variablen
Java:
private int [COLOR="SeaGreen"]Rappen[/COLOR];
private int [COLOR="SeaGreen"]Franken[/COLOR];
Doch du schreibst die Werte nie da rein! Die Werte im Konstruktor sind die, die als Argumente übergeben werden:
Java:
public Ticketautomat(int [COLOR="Red"]Franken[/COLOR], int [COLOR="Red"]Rappen[/COLOR])
{//Konstruktor
preis = [COLOR="Red"]Franken [/COLOR]+ [COLOR="Red"]Rappen[/COLOR];
bisherGezahlt = 0;
gesamtsumme = 0;
}
Irgendwo im Konstruktor musst du deine Eingabewerte der ganzen Klass "bekannt" machen ...
Java:
public Ticketautomat(int Franken, int Rappen)
{//Konstruktor
this.[COLOR="SeaGreen"]Franke [/COLOR]= Franken;
this.[COLOR="SeaGreen"]Rappen [/COLOR]= Rappen;
preis = Franken + Rappen;
bisherGezahlt = 0;
gesamtsumme = 0;
}
 

infinityfan

Mitglied
Hey danke für die schnellen Antworten. Naja, hatte bis jetzt erst zwei mal Java-Unterricht. Von da her ist da noch nicht viel Wissen vorhanden, jedoch arbeite ich daran ;). Mal schauen ob ich das so gepackt bekomme. Werde mich später nochmal melden. Bis dann.
 

javaDev2011

Mitglied
Hi infinityfan,

Ich weis gar nicht ob du meinen verbesserten Code nach der ganzen anderen schnellen Hilfe überhaupt noch brauchst, er funktioniert aber auf jeden Fall.

Java:
public class Ticketautomat {
    // Der Preis eines Tickets dieses Automaten.
    private double preis;//Modifizierer; Datentyp; Bezeichung
    // Der Betrag, der bisher vom Automatenbenutzer eingeworfen wurde.
    private double bisherGezahlt;
    // Die Geldsumme, die bisher von diesem Automaten eingenommen wurde.
    //private double gesamtsumme;
    private int rappen;
    private int franken;
    /**
    * Erzeuge einen Automaten, der Tickets zum angegebenen Preis
    * (in Franken und Rappen) ausgibt.
    */
    public Ticketautomat(int f, int r) {
        if (f >= 0 && r >= 0 && r < 100){
            franken = f;
            rappen = r;
            preis = rappen; 
            preis /= 100;
            preis += franken;
            bisherGezahlt = 0;
            //gesamtsumme = 0;
        } 
        else {
            System.err.println("Bitte nur gültige Beträge verwenden: " + f + "," + r);
        }
    }
 
    /**Anfang der 1. Methode
    * Liefere den Preis eines Tickets dieses Automaten (in Cent).Return ist nicht gleich System.out.println()!
    */
    public void gibPreis() {
        System.out.println("Der Preis beträgt: " + franken +" Franken und " + rappen +" Rappen");
    }
 
    /**Beginn der 2. Methode
    * Liefere die Hoehe des Betrags, der fuer das naechste Ticket bereits
    * eingeworfen wurde.
    */
    public double gibBisherGezahltenBetrag() {
         return bisherGezahlt;//Rückgabeanweisung "return" von bisherGezahlt;, liefert einen ganzzahligen Wert
    }
 
    /**Begin der 3. Methode (modifizierende Methode)
    * Nimm den angegebenen Betrag (in Franken und Rappen) als Anzahlung fuer das 
    * nächste Ticket. Prüfe, ob der Betrag sinnvoll ist.
    */
    // modifizierende Methode, am Parameter erkennbar
    public void geldEinwerfen(int f, int r) {
       if (f >= 0 && r >= 0 && r < 100) {// bedingte Anweisung; true oder false
           double jetztGezahlt = r; 
           jetztGezahlt /= 100;
           jetztGezahlt += f;
           bisherGezahlt += jetztGezahlt; //bisherGezahlt = bisherGezahlt + betrag;//
       }
       else {
           //Betrag hat int Wert; Fehlermeldung wird ausgegeben....
           System.err.println("Bitte nur gültige Beträge verwenden: " + f + ","+ r);
       }
    }
 
    /**
    * Drucke ein Ticket, wenn gen¸gend Geld eingeworfen wurde, und 
    * ziehe den Ticketpreis vom bisher gezahlten Betrag ab. Gib eine 
    * Fehlermeldung aus, falls noch Geld für ein Ticket fehlt.
    */
    //modifizierende Methode
    public void ticketDrucken() { 
        if (bisherGezahlt >= preis) {
            // Den Ausdruck eines Tickets simulieren.
            System.out.println("##################");
            System.out.println("# Die BlueJ-Linie");
            System.out.println("# Ticket");
            System.out.println("# " + franken +" Franken");
            System.out.println("# " + rappen +" Rappen");
            System.out.println("##################");
            System.out.println();
            // Die Gesamtsumme um den Ticketpreis erhöhen.
            //gesamtsumme = gesamtsumme + preis;
            // Den Preis von der bisherigen Bezahlung abziehen.
            bisherGezahlt -= preis;
            if(bisherGezahlt != 0){
                System.out.println("Sie erhalten noch "+bisherGezahlt+" Franken");
            }
        }
        else {
            System.out.println("Sie müssen noch mindestens " + (preis - bisherGezahlt) + " Franken einwerfen.");
        }
    }
 
    /**
    * Gib das Wechselgeld bzw. den bisher gezahlten Betrag zur¸ck.
    */
    public double wechselgeldAuszahlen() {
         double wechselgeld = bisherGezahlt; //lokale Variable (Hilfsvariable); nur in der Methode wirksam; wird nachher wieder verworfen
         bisherGezahlt = 0; //setzt bisherGezahlt auf 0 zurück
         return wechselgeld; //gibt Wert von wechselgeld zurück, nicht im Textfeld
    }
    
}

javaDev2011
 

infinityfan

Mitglied
Morgen zusammen. Funktioniert jetzt alles tip top. @JavaDev2011, danke für deine Hilfe mit dem Gesammtcode, das hilft mir doch sehr um die Zusammenhänge besser sehen. Bin mal gespannt wie die Projektarbeit "Minesweeper" so wird ;).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Ticketautomat strukturierter hinbekommen Java Basics - Anfänger-Themen 55
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
S Ticketautomat Java Basics - Anfänger-Themen 17
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
laxla123 If-else Java Java Basics - Anfänger-Themen 4
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
S Substring in java Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben