Ticketautomat programmieren

mihe7

Top Contributor
Ich verstehe nicht was genau damit gemeint ist.
"Erstellen Sie anschließend eine Methode returnChange(), die als Parameter die Summe des zurückzugebenden Guthabens erhält sowie eine Information, ob das Geld wirklich zurückgegeben werden soll, oder ob nur zu ermitteln ist, ob das Geld passend zurückgegeben werden könnte. Als Ergebnis liefert die Methode zurück, ob der Automat den gewünschten Betrag passend zurückgeben kann."

Die Methode soll zwei Parameter bekommen:
1. den zurückzuzahlenden Betrag
2. einen booleschen Wert, der angibt, ob das Geld zurückgegeben werden soll oder eben nur geprüft werden soll, ob das Geld zurückgegeben werden könnte.

Die Methode liefert true, wenn der Automat das Geld passend(!) zurückgeben kann bzw. zurückgeben konnte, false in allen anderen Fällen.

Außerdem machst Du es Dir etwas einfach: wenn der zurückzugebende Betrag z. B. 40 Cent wären und Du aber nur 3 Cent Münzen hast, hättest Du ein kleines Problem...
 

nikva

Bekanntes Mitglied
Aber wie gebe ich den zurückzuzahlenden Betrag an die methode wenn er doch erst in der methode berechnet wird? Soll ich ihn schon im Methodenkopf berechnen? Oder soll ich den wert in refundchange berechnen und dann in returnchange den wert aus refundchange als parameter entgegennehmen?
also etwa so?
Java:
    public boolean returnChange(int change, boolean giveChange) {
        change = getBalance() - ticketPrice;
        if (giveChange && change > 0) {
            int change10CtCoins = change / 10;
            int change5CtCoins = change % 10 / 5;
            int change2CtCoins = (getBalance() - change10CtCoins * 10 - change5CtCoins * 5) / 2;
            int change1CtCoins = getBalance() - change10CtCoins - change5CtCoins - change2CtCoins;

            setFill1Ct(getFill1Ct() - change1CtCoins);
            setFill2Ct(getFill2Ct() - change2CtCoins);
            setFill5Ct(getFill5Ct() - change5CtCoins);
            setFill10Ct(getFill10Ct() - change10CtCoins);
            if (change1CtCoins + change2CtCoins + change5CtCoins + change10CtCoins == change) {
                return true;
            } else
                return false;
        } else
            return false;
    }
Außerdem machst Du es Dir etwas einfach: wenn der zurückzugebende Betrag z. B. 40 Cent wären und Du aber nur 3 Cent Münzen hast, hättest Du ein kleines Problem...
hier sollte ich dann also nach jedem münzfach prüfen ob ich überhaupt genug münzen hab um die überhaupt rauszugeben?
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Aber wie gebe ich den zurückzuzahlenden Betrag an die methode wenn er doch erst in der methode berechnet wird?
LOL, das ist doch ganz einfach: die Methode wird mit einem Betrag, z. b. 48 Cent aufgerufen. Und jetzt muss die Methode nachschauen, ob bzw. wie sie die 48 Cent mit den in den Münzfächern vorhandenen Münzen zusammenkratzen kann :)

hier sollte ich dann also nach jedem münzfach prüfen ob ich überhaupt genug münzen hab um die überhaupt rauszugeben?
NB: Oops, das oben sollte "und Du aber nur 3 x 10 Cent Münzen hast" heißen. Und ja, natürlich: Du kannst ja nicht mehr Münzen rausgeben als Du hast.

Nehmen wir den Fall, dass Du 48 Cent rausgeben sollst. Du rechnest nun:

change10CtCoins = change / 10 --> change10CtCoints = 48 / 10 = 4

Wenn Du aber nur 3 x 10 Cent Münzen im Münzfach hast, dann kannst Du nur diese 3 rausgeben und keine 4. Das heißt aber nicht sofort, dass der Betrag nicht zurückbezahlt werden kann, denn die 48 Cent lassen sich ja ganz unterschiedlich zusammensetzen:
4 x 10, 1 x 5, 1 x 2, 1 x 1
3 x 10, 3 x 5, 1 x 2, 1 x 1
3 x 10, 2 x 5, 4 x 2
3 x 10, 1 x 5, 6 x 2, 1 x 1
usw. usw.

Nachtrag: in der Aufgabenstellung steht ganz genau, wie Du vorgehen sollst.
 
Zuletzt bearbeitet:

nikva

Bekanntes Mitglied
ich hab es jetzt so gemacht aber hab das problem, dass manchmal die fehlermeldung "kann nicht passend zurückgeben" kommt obwohl die münzen da sind.

Java:
    public boolean returnChange(int returnChange, boolean giveChange) {
        int change10CtCoins;
        int change5CtCoins;
        int change2CtCoins; // lokale variablen für wechselgeld
        int change1CtCoins;
        if (returnChange < 0) {
            return false;
        } else {
            change10CtCoins = returnChange / 10;
            if (getFill10Ct() * 10 >= returnChange) {
                returnChange = returnChange - (change10CtCoins * 10);
            } else {
                change10CtCoins = fill10Ct;
                returnChange = balance - (change10CtCoins * 10);

            }
            change5CtCoins = returnChange / 5;
            if (getFill5Ct() * 5 >= returnChange) {
                returnChange = returnChange - (change5CtCoins * 5);
            } else {
                change5CtCoins = fill5Ct;
                returnChange = balance - (change5CtCoins * 5);
            }
            change2CtCoins = returnChange / 2;
            if (getFill2Ct() * 2 >= change2CtCoins) {
                returnChange = returnChange - (change5CtCoins * 2);
            } else {
                change2CtCoins = fill2Ct;
                returnChange = balance - (change2CtCoins * 2);
            }
            change1CtCoins = returnChange / 1;
            if (getFill1Ct() >= returnChange) {
                returnChange = returnChange - change1CtCoins;
            } else {
                change1CtCoins = fill1Ct;
                returnChange = balance - change1CtCoins;
            }
            if (fill1Ct >= returnChange) {
                if (giveChange == true) {
                    setFill10Ct(fill10Ct - change10CtCoins);
                    setFill5Ct(fill5Ct - change5CtCoins);
                    setFill2Ct(fill2Ct - change2CtCoins);
                    setFill1Ct(fill1Ct - change1CtCoins);
                }

                return true;
            }
        }
        return true;
    }

    private void setBalance(int x) {
        x = balance;

    }

    public int refundBalance() {
        int returnBalance = balance;
        returnChange(returnBalance, true);
        balance = 0;
        return returnBalance;
    }

    /**
     * gibt das Ticket aus wenn genug guthaben eingezahlt wurde gibt an wie viel
     * noch einzuzahlen ist falls nicht genug eingezahlt wurde gibt fehlermeldung an
     * falls nicht genug wechselgeld vorhanden ist
     */
    public String printTicket() {
        if (balance < ticketPrice) {
            return "Es fehlen noch " + (ticketPrice - balance) + "Ct";
        } else if (returnChange(balance - ticketPrice, false)) {
            return ("kann nicht passend Wechselgeld geben");
        } else {
            balance = (balance - ticketPrice);
            return (" ######################### \n # the HM Line \n #Ticket \n #########################");
        }
    }
 

mihe7

Top Contributor
Deine else-Zweige sind falsch. Die Variable "balance" darf in der ganzen Methode nicht auftauchen.

EDIT: ansonsten sieht das ganz ordentlich aus.
EDIT2: da sind noch weitere Fehler drin.
 

mihe7

Top Contributor
Java:
            change10CtCoins = returnChange / 10;
            if (fill10Ct < change10CtCoins) {
                change10CtCoins = fill10Ct;
            }
            returnChange = returnChange - change10CtCoins*10;
Oder noch kürzer:
Java:
            change10CtCoins = Math.max(returnChange / 10, fill10Ct);
            returnChange -= 10 * change10CtCoins;
Die Schreibweise a -= x; ist kurz für a = a - x;
 

nikva

Bekanntes Mitglied
wenn ich das so mache stürzt die console mit folgender meldung ab

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error on token "}", { expected after this token
Syntax error on token(s), misplaced construct(s)
Syntax error on token "}", delete this token
Syntax error on token "(", ; expected
Syntax error on token ")", ; expected
Syntax error on token "refundBalance", AnnotationName expected after this token

at edu.cs.hm.swe1.ticketmachine.TicketMachine.<init>(TicketMachine.java:219)
at edu.cs.hm.swe1.Main.main(Main.java:33)
 

mihe7

Top Contributor
Dann hast Du irgendwo was falsch eingefügt. Das aus Kommentar #58 war nur beispielhaft für die 10 Cent-Münzen. Das soll also nur den Block
Java:
            change10CtCoins = returnChange / 10;
            if (getFill10Ct() * 10 >= returnChange) {
                returnChange = returnChange - (change10CtCoins * 10);
            } else {
                change10CtCoins = fill10Ct;
                returnChange = balance - (change10CtCoins * 10);

            }
ersetzen.
 

nikva

Bekanntes Mitglied
Java:
    public boolean returnChange(int returnChange, boolean giveChange) {
        int change10CtCoins;
        int change5CtCoins;
        int change2CtCoins; // lokale variablen für wechselgeld
        int change1CtCoins;
        if (returnChange < 0) {
            return false;
        } else {
            change10CtCoins = returnChange / 10;
            if (fill10Ct < change10CtCoins) {
                change10CtCoins = fill10Ct;
            }
            returnChange = returnChange - change10CtCoins * 10;

            change5CtCoins = returnChange / 5;
            if (fill5Ct < change5CtCoins) {
                change5CtCoins = fill5Ct;
            }

            returnChange = returnChange - change5CtCoins * 5;

            change2CtCoins = returnChange / 2;
            if (fill2Ct < change2CtCoins) {
                change2CtCoins = fill2Ct;
            }
            returnChange = returnChange - change2CtCoins * 2;

            change1CtCoins = returnChange / 1;
            if (fill1Ct < change1CtCoins) {
                change1CtCoins = fill1Ct;
            }
            returnChange = returnChange - change1CtCoins;

            if (fill1Ct >= returnChange) {
                if (giveChange == true) {
                    setFill10Ct(fill10Ct - change10CtCoins);
                    setFill5Ct(fill5Ct - change5CtCoins);
                    setFill2Ct(fill2Ct - change2CtCoins);
                    setFill1Ct(fill1Ct - change1CtCoins);
                }

                return true;
            }
        }
        return true;
    }

    private void setBalance(int x) {
        x = balance;

    }

    public int refundBalance() {
        int returnBalance = balance;
        returnChange(returnBalance, true);
        balance = 0;
        return returnBalance;
    }

    /**
     * gibt das Ticket aus wenn genug guthaben eingezahlt wurde gibt an wie viel
     * noch einzuzahlen ist falls nicht genug eingezahlt wurde gibt fehlermeldung an
     * falls nicht genug wechselgeld vorhanden ist
     */
    public String printTicket() {
        if (balance < ticketPrice) {
            return "Es fehlen noch " + (ticketPrice - balance) + "Ct";
        } else if (returnChange(balance - ticketPrice, false)) {
            return ("kann nicht passend Wechselgeld geben");
        } else {
            balance = (balance - ticketPrice);
            return (" ######################### \n # the HM Line \n #Ticket \n #########################");
        }
    }

    public int getBalance() {
        // TODO Auto-generated method stub
        return balance;
    }
}

es lässt sich jetzt zwar kompilieren aber jetzt habe ich wieder das selbe problem wie zuvor: es kommt immer die meldung, dass nicht genug wechselgeld da ist obwohl es eigentlich passen müsste.
 

nikva

Bekanntes Mitglied
ich rufe mit dem wert balance-ticketpreis und false auf weil ich ja nur eine überprüfung will und nur falls möglich die münzstände geleert werden
 

nikva

Bekanntes Mitglied
wahrscheinlich muss ich iwie eher abfragen ob returnchange wirklich true ist als dass ich es im vorhinein als false setze?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Ticketautomat strukturierter hinbekommen Java Basics - Anfänger-Themen 55
S Ticketautomat Java Basics - Anfänger-Themen 17
I Ticketautomat in Java umprogrammieren Java Basics - Anfänger-Themen 8
A GUI bequemer programmieren? Java Basics - Anfänger-Themen 6
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
V Zeichenkette programmieren Java Basics - Anfänger-Themen 20
O Fenster programmieren Java Basics - Anfänger-Themen 2
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
A Programmieren lernen Java Basics - Anfänger-Themen 28
F ArrayListe manuell programmieren? Java Basics - Anfänger-Themen 24
X Erste Schritte Einstieg ins Programmieren Java Java Basics - Anfänger-Themen 2
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
Ellachen55 Weihnachtsbaum in Eclipse programmieren Java Basics - Anfänger-Themen 6
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
S Dreieckssignal programmieren Java Basics - Anfänger-Themen 5
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
M Spiel programmieren Java Basics - Anfänger-Themen 16
A Fenster programmieren Java Basics - Anfänger-Themen 1
V OOP Kassensystem objektorientiert programmieren Java Basics - Anfänger-Themen 15
A Erste Schritte DoodleJump programmieren: Kollisionsabfrage Java Basics - Anfänger-Themen 4
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
G Rekursives Programmieren --> harmonische Reihe Java Basics - Anfänger-Themen 3
A Endlich anfangen mit Programmieren ! Java Basics - Anfänger-Themen 8
L Karawane programmieren Java Basics - Anfänger-Themen 0
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
steven789hjk543 Erste Schritte java programmieren/ Schritt für Schritt Java Basics - Anfänger-Themen 14
I Spiel programmieren. Java Basics - Anfänger-Themen 16
H [Studium] Mäxchenspiel programmieren Java Basics - Anfänger-Themen 10
C BlueJ Zahlenschloss programmieren Java Basics - Anfänger-Themen 5
steven789hjk543 mit dem Smartphone java programmieren Java Basics - Anfänger-Themen 44
F Okjektorientiert programmieren Java Basics - Anfänger-Themen 2
S OOP Ticketsystem programmieren Java Basics - Anfänger-Themen 6
P Selber Programmieren lernen oder Uni? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben