Hey,
es geht um eine geldRückgabe-Methode eines Getränkeautomats.
Ich habe eine Klasse "Kasse", in welcher die Münzbestände festgelegt sind [AnzahlZehnCent = 10, AnzahlZwanzigCent = 10, ... etc.].
Die einzig verfügbaren Münzen sind 10ct, 20ct, 50ct, 100ct und 200ct (gerechnet wird nur in Cent, also 1€ = 100ct und 2€ = 200ct).
Zudem sind noch die Methoden "entnehmeZehnCent(X) [reduziert den 10-Cent-Münzbestand um X Münzen] und "verfügbarZehnCent(X)" [liefert true, falls .getZehnCentMünzen - X Münzen >= 0] für alle Münzen vorhanden.
Die Methode geldRückgabe(int GeldEinwurf) soll also jene Münzen ausliefern, welche a) am Größten sind und b) laut Münzbestand auch ausgebbar sind.
_________________________________________________________________________________________________________________________________________________________________________
Beispiel:
Wasser kostet 40ct. Der Benutzer schmeißt 200ct hinein. Das Rückgeld beträgt also 160ct. Die kürzeste Kombination (also jene, welche sich aus den größten Münzen zusammensetzt) ist 100ct + 50ct+ 10ct und soll ausgegeben werden. ABER, falls beispielsweise keine 50ct Münzen vorhanden sind, sollen stattdessen 100ct+ 20ct+ 20ct + 20ct ausgegeben werden.
__________________________________________________________________________________________________________________________________________________________________________
Das Grundgerüst meiner Methode ist im Grunde
while(GeldEinwurf > 0){
Wie viele 200ct passen rein? Ist diese Anzahl an 200ct Münzen ausgebbar? Falls ja, ausgeben. Falls nein, kannst du alternativ die selbe Summe an 100ct ausgeben? Falls nein, kannst du alternativ die selbe Summe an 50ct ausgeben? Etc.... Subtrahiere den Wert vom GeldEinwurf.
Wie viele 100ct passen rein? Ist diese Anzahl an 100ct Münzen ausgebbar? Falls ja ausgeben. Falls nein, kannst du alternativ die selbe Summe an 50ct ausgeben? Etc.... Subtrahiere den Wert vom GeldEinwurf.
Wie viele ....
Solange bis GeldEinwurf = 0.
}
Meine jetzige Methode schafft es prima, die Kombination mit den jeweils größten Münzen auszugeben. Auch mit Sonderfällen klappt es manchmal, aber oftmals auch nicht.
Ich muss sagen, dass meine jetzige Methode etwa 400 Zeilen lang ist und etliche Bedingungen und Vergleiche heranzieht, so dass ich frustriert selbst nicht mehr ganz durchblicke. Da es sich um einen Erstsemester-Informatik-Kurs handelt, kann ich mir kaum vorstellen, dass die Aufgabe so anzugehen ist. Vor allem weil die vorherigen Aufgaben auch immer in unter einer Stunde zu lösen waren. Vor dieser Aufgabe sitze ich seit einer Woche.
Ich hab das Gefühl dass ich hier etwas massiv verüberkompliziere.
es geht um eine geldRückgabe-Methode eines Getränkeautomats.
Ich habe eine Klasse "Kasse", in welcher die Münzbestände festgelegt sind [AnzahlZehnCent = 10, AnzahlZwanzigCent = 10, ... etc.].
Die einzig verfügbaren Münzen sind 10ct, 20ct, 50ct, 100ct und 200ct (gerechnet wird nur in Cent, also 1€ = 100ct und 2€ = 200ct).
Zudem sind noch die Methoden "entnehmeZehnCent(X) [reduziert den 10-Cent-Münzbestand um X Münzen] und "verfügbarZehnCent(X)" [liefert true, falls .getZehnCentMünzen - X Münzen >= 0] für alle Münzen vorhanden.
Die Methode geldRückgabe(int GeldEinwurf) soll also jene Münzen ausliefern, welche a) am Größten sind und b) laut Münzbestand auch ausgebbar sind.
_________________________________________________________________________________________________________________________________________________________________________
Beispiel:
Wasser kostet 40ct. Der Benutzer schmeißt 200ct hinein. Das Rückgeld beträgt also 160ct. Die kürzeste Kombination (also jene, welche sich aus den größten Münzen zusammensetzt) ist 100ct + 50ct+ 10ct und soll ausgegeben werden. ABER, falls beispielsweise keine 50ct Münzen vorhanden sind, sollen stattdessen 100ct+ 20ct+ 20ct + 20ct ausgegeben werden.
__________________________________________________________________________________________________________________________________________________________________________
Das Grundgerüst meiner Methode ist im Grunde
while(GeldEinwurf > 0){
Wie viele 200ct passen rein? Ist diese Anzahl an 200ct Münzen ausgebbar? Falls ja, ausgeben. Falls nein, kannst du alternativ die selbe Summe an 100ct ausgeben? Falls nein, kannst du alternativ die selbe Summe an 50ct ausgeben? Etc.... Subtrahiere den Wert vom GeldEinwurf.
Wie viele 100ct passen rein? Ist diese Anzahl an 100ct Münzen ausgebbar? Falls ja ausgeben. Falls nein, kannst du alternativ die selbe Summe an 50ct ausgeben? Etc.... Subtrahiere den Wert vom GeldEinwurf.
Wie viele ....
Solange bis GeldEinwurf = 0.
}
Meine jetzige Methode schafft es prima, die Kombination mit den jeweils größten Münzen auszugeben. Auch mit Sonderfällen klappt es manchmal, aber oftmals auch nicht.
Ich muss sagen, dass meine jetzige Methode etwa 400 Zeilen lang ist und etliche Bedingungen und Vergleiche heranzieht, so dass ich frustriert selbst nicht mehr ganz durchblicke. Da es sich um einen Erstsemester-Informatik-Kurs handelt, kann ich mir kaum vorstellen, dass die Aufgabe so anzugehen ist. Vor allem weil die vorherigen Aufgaben auch immer in unter einer Stunde zu lösen waren. Vor dieser Aufgabe sitze ich seit einer Woche.
Ich hab das Gefühl dass ich hier etwas massiv verüberkompliziere.