Eurobeträge in möglichst wenig Scheine/Münzen zerlegen (2D-Arrays)

überlebender

Aktives Mitglied
Ich sitze jetzt schon lange vor dieser Aufgabe. Mal Abgesehen von der Aufgabe selbst hatte ich schon Schwierigkeiten bei der Deklaration und Initialisierung des Arrays, weil ich nicht wusste, wie ich es in einer Zeile mit den Dimensionen [2][15] erzeugen, deklarieren und gleichzeitig mit Werten initialisieren soll.

Beim Lesen der Aufgabe leuchtet nur ein einziges Symbol in meinem Kopf auf, nämlich "?".
In meinem Programmierkurs habe ich absolut keine Informationen darüber bekommen, wie man an solche Aufgabe herangeht, einfach Klasse!
Jetzt muss ich andere Leute in Foren belästigen nur weil eigentlich dafür zuständige Personen kein Bock hatten, mir die nötigen Informationen zu geben.
Es wird noch besser: Der Erfolg in den Aufgabenblättern entscheidet darüber ob ich eine Zulassung zur Klausur erhalte oder nicht, GROSSARTIG!!!!




Meine Aufgabe:

1. Deklarieren ein 2D-Array namens einheiten mit den Dimensionen [2] [15] und weise einheiten in der ersten Zeile folgende Werte zu: 500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01 und in der zweiten Zeile sind alle Werte 0.

2. Weiterhin deklarieren Sie die statische double-Variable input und weisen ihr einen beliebigen Wert zu

3. Schreiben Sie ein Programm, welches den Geldbetrag (in EUR), welcher in input gespeichert ist, in möglichst wenig Scheine und / oder Münzen zerlegt.

Hinweis:

Screenshot 2023-11-24 103058.jpg

Beispiel:

Screenshot 2023-11-24 103353.jpg
 

überlebender

Aktives Mitglied
Ganz einfach mit der Standardfrage: wie würdest Du es auf einem Blatt Papier mit einem Stift in der Hand lösen?
Notes_231124_112942_2.jpg

Das wäre jetzt grob mein Ansatz.
Die gegebenen Werte des Arrays bleiben ja immer gleich.
Also muss ich den Input durch die gegebenen Werte teilen mit modulo und schauen ob da Rest 0 rauskommt. Ist das der Fall, dann ist der Input genau durch die gegebenen Werte teilbar und ich kann z.B. bei input 20 einfach 1×20 rechnen.

Jedoch funktioniert dieser Ansatz nur bei Vielfachen der gegebenen Werte. Bei Input können aber verschiedene Werte stehen und zusätzlich noch mit Kommastellen.

Ich verstehe nicht, wie ich den Gedanken "nehme immer den größten Schein oder die größte Münze, um zum Ergebnis zu gelangen" ins Programm implementieren soll.

Es gibt doch unendlich Möglichkeiten der Anordnung. Das Programm soll für input 10 genauso funktionieren wie für input 95856475.....
 

Robertop

Bekanntes Mitglied
Anstatt Modulo kannst du durch den Scheinwert teilen ohne Rest, dann wüsstest du, wie viele von diesem Schein du brauchst. Dann das merken und den Rest ausrechnen und mit dem nächstkleineren Schein weitermachen.
Z.B. Betrag 1750
1750 / 500 = 3 (also 1500, Rest 250)
250 / 200 = 1
50 / 100 = 0
50 / 50 = 1
0 / 30 = 0
...
 

überlebender

Aktives Mitglied
Anstatt Modulo kannst du durch den Scheinwert teilen ohne Rest, dann wüsstest du, wie viele von diesem Schein du brauchst. Dann das merken und den Rest ausrechnen und mit dem nächstkleineren Schein weitermachen.
Z.B. Betrag 1750
1750 / 500 = 3 (also 1500, Rest 250)
250 / 200 = 1
50 / 100 = 0
50 / 50 = 1
0 / 30 = 0
...
So mein letzter Versuch:

Java:
static double [] [] einheiten = new double [2] [15];
    static {einheiten[0] = new double [] {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
}
    static double  input = 90;
    
    
    
    /*
     * Ende des Deklarationsbereichs.
     */

    public static void main(String[] args) {
        /*
         * Start des algorithmischen Bereichs.
         */
if (input > 500 && input < 1000);
    input = (input % 500);
                
if (input < 500 && input > 200);
    input = (input % 200);

if (input < 200 && input  > 100);
    input = (input % 100);

if (input < 100 && input > 50);
    input = (input % 50);
                
if (input < 50 && input > 20);
    input = (input % 20);
                
if (input < 20 && input > 10);
    input = (input % 10);
    
if (input < 10 && input > 5);
    input = (input % 5);
    
if (input < 5 && input > 2);
    input = (input % 2);
    
if (input < 2 && input > 1);
    input = (input % 1);
    
if (input < 1 && input > 0.5);
    input = (input % 0.5);
    
if (input < 0.5 && input > 0.2);
    input = (input % 0.2);
    
if (input < 0.2 && input > 0.1);
    input = (input % 0.1);
    
if (input < 0.1 && input > 0.05);
    input = (input % 0.05);
    
if (input < 0.05 &&input > 0.02);
    input = (input % 0.02);
    
if (input < 0.02 && input > 0.01);
    input = (input % 0.01);




        
    
                
        
        
        /*
         * Hier endet der algorithmische Bereich. Dieser Kommentar und damit alles, was
         * darunter steht, darf verschoben werden (wenn Sie zum Beispiel mehr Zeilen
         * brauchen).
         *
         * Alles, was hinter diesem Kommentar steht, darf nicht veraendert werden!
         *
         */

        System.out.println("Betraege: " + Arrays.toString(einheiten[0]));
        System.out.println("Anzahl: " + Arrays.toString(einheiten[1]));

    }

}

Das ist der hässlichste Code der jemals geschrieben wurde, ich weiß..

Hab jetzt deine Idee berücksichtigt, keine Ahnung ob ich das richtig umgesetzt habe oder nicht (wahrscheinlich nicht)

Jedenfalls bleibt das Array absolut unverändert, weil der Wert einfach irgendwann gegen 0 geht. Ich komme einfach nicht mehr weiter. Keine Chance mehr für mich.
 

KonradN

Super-Moderator
Mitarbeiter
Kannst Du in Worten beschreiben, was Du da im Code versucht hast?

Die Idee dieses Ansatzes ist, dass Du eine exakte Vorgehensweise formulierst, die eine andere Person, ohne die Aufgabe zu kennen, ausführen kann. Also vergiss Java erst einmal komplett!

Über den Code zu sprechen ist ansonsten nicht zielführend, daher lasse ich den auch einmal komplett aussen vor.
 

überlebender

Aktives Mitglied
Also nochmal kurz und knapp:

1. Ich habe einen Eurobetrag, der in meinem Programm input heißt.
2. Mein Programm soll diesen input in möglichst wenige Scheine/Münzen zerlegen.

Dazu soll ich ein Array deklarieren und initialisieren. Werte im Array: 500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01
(also von 500€ bis 0.01€)


Am Ende soll die Ausgabe auf der Konsole so aussehen:
Screenshot 2023-11-24 130716.jpg
Also wenn ich 62.79€ im Input stehen habe, dann soll dieser Betrag auf die kleinste Anzahl der möglichen Scheine/Münzen aufgeteilt werden.

Noch simpler kann ich die Aufgabe nicht erklären.

Mein Problem: Die Aufgabe ist zwar logisch, doch weiß ich nicht, wie ich diese Logik in meinen Code bringe.
 

überlebender

Aktives Mitglied
Kannst Du in Worten beschreiben, was Du da im Code versucht hast?

Die Idee dieses Ansatzes ist, dass Du eine exakte Vorgehensweise formulierst, die eine andere Person, ohne die Aufgabe zu kennen, ausführen kann. Also vergiss Java erst einmal komplett!

Über den Code zu sprechen ist ansonsten nicht zielführend, daher lasse ich den auch einmal komplett aussen vor.
Soll ich vielleicht einfach die ganze Aufgabe posten? Ich möchte hier echt keinem die Zeit rauben und möchte nicht, dass Leute die echt was drauf haben, ihre Zeit damit verbringen, lächerliche Aufgaben zu lösen.

Mir bleibt einfach nichts anderes übrig als in Foren zu fragen, weil ich einfach nicht das nötige Wissen habe, um die Aufgabe zu lösen.

Ich finde es ziemlich frech, dass die zuständigen Personen im Programmierkurs, die Studenten einfach ins kalte Wasser werfen und dann auch noch die Note davon abhängig machen. Ich mein ich kann kein Baum fällen, wenn ich nicht das nötige Werkzeug dazu habe...
 

Robertop

Bekanntes Mitglied
Ich denke, die Aufgabenstellung kennen wir mittlerweile alle. :) Worum es @KonradN geht, ist, dass du beschreiben sollst, was genau dein Code tut bzw. tun soll, Zeile für Zeile.
 

überlebender

Aktives Mitglied
Ich denke, die Aufgabenstellung kennen wir mittlerweile alle. :) Worum es @KonradN geht, ist, dass du beschreiben sollst, was genau dein Code tut bzw. tun soll, Zeile für Zeile.
Mein Code soll den Input erst durch 500 rest 0 teilen, dann durch 200 rest 0 usw..

Wie ich das Ergebnis dann dem Array zuordne habe ich im Code nicht implementiert, habe auch keine Idee, wie ich das allgemeingültig mache, also für alle Werte.

Ich bin mittlerweile mit meinem Latein echt am Ende. Habe noch tausend andere Aufgaben zu lösen und sitze an dieser einen jetzt schon seit 8:00 Uhr morgens. Abgabe ist in einer Stunde, deswegen habe ich die Hoffnung sowieso schon verloren.
 

Robertop

Bekanntes Mitglied
Fragen, die ich mir bei deinem Code stellen könnte, sind zum Beispiel:
1. Wozu sind die If-Abfragen da? Die Abfrage (input > 500 && input < 1000) zum Beispiel würde beim Input von genau 500 ja genauso übersprungen werden wie bei Werten über 1000. Ist das wirklich so gedacht?
2. Falls mal eine If-Abfrage zutrifft, wird eine Rechnung mit dem input durchgeführt, deren Ergebnis dann wieder in input herein geschrieben wird. Ist das wirklich das, was da passieren soll? Welcher Wert wird zum Beispiel nach der 200er Abfrage in input stehen, wenn input am Start 410 wäre? Macht das Ergebnis an dieser Stelle sinn?
3. Du möchtest eine Division ohne Rest durchführen. Ist % da der richtige Operator?
 

überlebender

Aktives Mitglied
Fragen, die ich mir bei deinem Code stellen könnte, sind zum Beispiel:
1. Wozu sind die If-Abfragen da? Die Abfrage (input > 500 && input < 1000) zum Beispiel würde beim Input von genau 500 ja genauso übersprungen werden wie bei Werten über 1000. Ist das wirklich so gedacht?
2. Falls mal eine If-Abfrage zutrifft, wird eine Rechnung mit dem input durchgeführt, deren Ergebnis dann wieder in input herein geschrieben wird. Ist das wirklich das, was da passieren soll? Welcher Wert wird zum Beispiel nach der 200er Abfrage in input stehen, wenn input am Start 410 wäre? Macht das Ergebnis an dieser Stelle sinn?
3. Du möchtest eine Division ohne Rest durchführen. Ist % da der richtige Operator?
Der Code, den ich vorhin geschrieben habe, war nur ein Experiment. Ich habe es nur gepostet um zu zeigen, dass ich dein Idee versucht habe umzusetzen. Ich weiß, dass das völliger Blödsinn ist, aber ich habe einfach keine andere Idee.

Außer den obigen Code habe ich keinen anderen Ansatz gefunden diese Aufgabe zu lösen.
 

überlebender

Aktives Mitglied
Wenn mir jemand auf die Sprünge helfen würde, dann könnte ich wenigstens irgendwas versuchen. Vielleicht könnte ich dann auch was lernen.

Die Tatsache, dass ich keine Ahnung hab und nicht einmal weiß, wie ich an die Aufgabe herangehen soll, bringt mich auch nicht weiter. So könnte ich noch 100 Jahre hier sitzen.

Ich brauche wenigstens irgendeinen Hinweis. Das mir hier keiner die Lösung gibt ist mir klar, aber einfach zu sagen "ja mach mal irgendwas" bringt mich in keinster Weise weiter. Das einzige was ich gerade machen kann, ist mir den Kopf an dieser Aufgabe zu zerbrechen und in Angst und Bange auf die Deadline zusteuern die in 50 min ist. Das einzige was ich dann gelernt habe ist, wie man lange Texte in Foren schreibt und um die Aufgabe herumtanzt. Super!
 

KonradN

Super-Moderator
Mitarbeiter
Die Formulierung
Mein Code soll den Input erst durch 500 rest 0 teilen
sagt mir nichts. Was genau soll ich denn machen?

Ganz konkret: Du hast mir hier ganz viel Geld gegeben und jetzt steht @mihe7 vor mir und will sein Geld haben ... er fordert eine Summe von x. Spielen wir es mal ganz konkret durch: Er will 2.735,37 €

Ich wollte ihm 273537 1Cent Münzen geben, aber du hast mir leider nur 5.000 1Cent Münzen gegeben. Jetzt bin ich total aufgeschmissen.

Erklär mir mal, wie ich jemandem, dem Ich Geld geben soll, die richtige Anzahl Scheine / Münzen geben kann. Ich bin halt blond, aber wenn Du es mir genau vorgibst, dann kriege ich das hin. Aber du merkst: Ich habe absolut 0 Bock und habe gerade mit Müh und Not die Grundrechenarten verstanden :)
 

überlebender

Aktives Mitglied
Die Formulierung

sagt mir nichts. Was genau soll ich denn machen?

Ganz konkret: Du hast mir hier ganz viel Geld gegeben und jetzt steht @mihe7 vor mir und will sein Geld haben ... er fordert eine Summe von x. Spielen wir es mal ganz konkret durch: Er will 2.735,37 €

Ich wollte ihm 273537 1Cent Münzen geben, aber du hast mir leider nur 5.000 1Cent Münzen gegeben. Jetzt bin ich total aufgeschmissen.

Erklär mir mal, wie ich jemandem, dem Ich Geld geben soll, die richtige Anzahl Scheine / Münzen geben kann. Ich bin halt blond, aber wenn Du es mir genau vorgibst, dann kriege ich das hin. Aber du merkst: Ich habe absolut 0 Bock und habe gerade mit Müh und Not die Grundrechenarten verstanden :)
Okay.

Er fordert 2.735,37€

Dann gibst du ihm 5 x 500€ Scheine + 1x 200€ Schein + 1 x 20€ Schein + 1 x 10€ Schein + 1 x 5€ Schein + 1 x 0,2€ Münze + 1 x 0,1€ Münze + 1 x 0,05€ Münze + 1 x 0,02€ Münze

Ergibt: 2735, 37€

Und wie schreibe ich das für jeden möglichen Input ins Programm?
Es muss doch eine allgemeine Formel geben.
 

KonradN

Super-Moderator
Mitarbeiter
Dann gibst du ihm 5 x 500€ Scheine + 1x 200€ Schein + 1 x 20€ Schein + 1 x 10€ Schein + 1 x 5€ Schein + 1 x 0,2€ Münze + 1 x 0,1€ Münze + 1 x 0,05€ Münze + 1 x 0,02€ Münze
Du musst doch irgendwie auf diese Lösung gekommen sein? Was genau hast Du gemacht?
Beschreibe genau, was ich machen muss, damit ich auf diese Lösung kommen kann!

Die Vorgehensweise, die wir Dir hier versuchen nahe zu bringen ist der übliche Weg bei der Software Entwicklung: Der erste Schritt ist immer ein genaues Verständnis des Vorgehens. Die fachlichen Anforderungen und wie diese umgesetzt werden können, müssen verstanden werden. Da ist es also im Team auch nicht unüblich, dass man so Dinge an einem Whiteboard durchspielt oder so. Das läuft dann zwar auf einer etwas höheren Ebene aber das ist erst einmal egal.

Ersetz mal die if durch while und die = -Zeichen durch -=. Das sollte schon alles sein.
Und genau das sehe ich nicht. Dann wäre bei meinem Beispiel das Ergebnis, dass man gar kein Geld heraus gibt. Davon abgesehen braucht man für die einzelnen Zahlungsmittel keine Schleife. Eine einfache Berechnung pro Geldschein reicht aus.
 

mihe7

Top Contributor
Die gegebenen Werte des Arrays bleiben ja immer gleich.
Also muss ich den Input durch die gegebenen Werte teilen mit modulo und schauen ob da Rest 0 rauskommt. Ist das der Fall, dann ist der Input genau durch die gegebenen Werte teilbar und ich kann z.B. bei input 20 einfach 1×20 rechnen.

Jedoch funktioniert dieser Ansatz nur bei Vielfachen der gegebenen Werte. Bei Input können aber verschiedene Werte stehen und zusätzlich noch mit Kommastellen.

Ich verstehe nicht, wie ich den Gedanken "nehme immer den größten Schein oder die größte Münze, um zum Ergebnis zu gelangen" ins Programm implementieren soll.

Es gibt doch unendlich Möglichkeiten der Anordnung. Das Programm soll für input 10 genauso funktionieren wie für input 95856475.....

Also, Du hast hier schon sehr viele richtige Gedanken, ich glaube aber, dass Du im Moment einfach den Wald vor lauter Bäumen nicht siehst :)

Du musst den input "durch die gegebenen Werte teilen"... das ist zu ungenau.

Fangen wir mal andersrum an: gibst Du mir zuerst 500 €-Scheine oder 0,01 €-Münzen raus?
 

inixweiss

Mitglied
Ok, hier ist mal ein ganz einfacher Ansatz.

Java:
public static void scheine(int betrag) {
    int[] scheine = {30,5,1};
    for (int i = 0; i < scheine.length; ) {
        if (betrag <= 0) {
            //fertig
            return;
        }
        if (betrag >= scheine[i]) {
            System.out.println("Gib " + scheine[i] + " aus.");
            betrag -= scheine[i];
        } else {
            //Dieser Schein ist zu groß für dich:
            i++;
        }
    }
}

Try it online

Weil ich etwas faul bin, sagen wir es gibt nur drei Scheine 30, 5 und 1, sowie nur ganzzahlige Beträge.

Wie müsste sich der Code jetzt ändern, damit die Anzahl der jeweiligen Scheine "gezählt" würde?
 

KonradN

Super-Moderator
Mitarbeiter
Also nur weil hier so dubiose Lösungen gebracht werden, einfach einmal eine einfache, saubere Lösung:
Java:
    public static void zeigeAuszugebeneZahlungsmittel(final int betrag) {
        int[] zahlungsmittel = {500, 200, 100, 50, 20, 10 ,5 , 1};
        int restbetrag = betrag;
        for (int aktuellesZahlungsmittel : zahlungsmittel) {
            if (restbetrag > aktuellesZahlungsmittel) {
                int ausgabe = restbetrag / aktuellesZahlungsmittel;
                System.out.println("Gib bitte " + ausgabe + " Mal " + aktuellesZahlungsmittel + " aus.");
                restbetrag = restbetrag % aktuellesZahlungsmittel;
            }
        }
    }

Es gibt hier also ein paar ganz einfache Elemente:
a) Du gehst alle Zahlungsmittel durch - und zwar der Größe nach von groß nach klein.
b) Du ermittelst die Anzahl, wie oft das aktuelle Zahlungsmittel ausgegeben wird. Das ist eine einfach int Division. (Und die machen wir nur, wenn der Restbetrag groß genug ist)
c) Der Restbetrag ist dann einfach der Rest der Division. Also der Reminder Operator kann hier sehr gut verwendet werden.

Und dann bitte immer auf halbwegs sauberen Code achten:
  • sinnvolle Bezeichner!
  • Sprachelemente so nutzen, wie diese angedacht waren. Die Zählschleife ist als Zählschleife angedacht - Und da verändert man im Body nicht den Zähler. Das sind Dinge, die ein Entwickler beim betrachten des Codes nicht erwartet und daher sollte man sowas schlicht nicht machen ...
 

Blender3D

Top Contributor
In meinem Programmierkurs habe ich absolut keine Informationen darüber bekommen, wie man an solche Aufgabe herangeht, einfach Klasse!
Jetzt muss ich andere Leute in Foren belästigen nur weil eigentlich dafür zuständige Personen kein Bock hatten, mir die nötigen Informationen zu geben.
Einfach die Vorgaben Punkt für Punkt ausführen.
Java:
public class SplitMoney {

    public static void main(String[] args) {

        // 1) Array deklarieren
        double einheiten[][] = new double[2][];
        einheiten[0] = new double[] { 500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01 };
        einheiten[1] = new double[einheiten[0].length];

        // 2)
        double input = 2164.28;

        // 3) Zerlegen
        double rest = input;
        for (int i = 0; i < einheiten[0].length; i++) {
            if (rest >= einheiten[0][i]) {
                einheiten[1][i] = (int) (rest / einheiten[0][i]);
                rest = rest % einheiten[0][i];
            }    
        }

        // 4 Ausgabe
        String printStr = "";
        for (int i = 0; i < einheiten[0].length; i++) {
            if (einheiten[1][i] > 0) {
                int count = (int) einheiten[1][i];
                if (count > 1)
                    printStr += count + "x";
                printStr += einheiten[0][i] < 1 ? (double) einheiten[0][i] : (int) einheiten[0][i];
                printStr += (i < einheiten[0].length - 1) ? " + " : " = ";
            }
        }
        printStr += input;
        System.out.println(printStr);
    }
}
 
Zuletzt bearbeitet:

fireGlurak

Mitglied
Also nur weil hier so dubiose Lösungen gebracht werden, einfach einmal eine einfache, saubere Lösung:
Java:
    public static void zeigeAuszugebeneZahlungsmittel(final int betrag) {
        int[] zahlungsmittel = {500, 200, 100, 50, 20, 10 ,5 , 1};
        int restbetrag = betrag;
        for (int aktuellesZahlungsmittel : zahlungsmittel) {
            if (restbetrag > aktuellesZahlungsmittel) {
                int ausgabe = restbetrag / aktuellesZahlungsmittel;
                System.out.println("Gib bitte " + ausgabe + " Mal " + aktuellesZahlungsmittel + " aus.");
                restbetrag = restbetrag % aktuellesZahlungsmittel;
            }
        }
    }

Es gibt hier also ein paar ganz einfache Elemente:
a) Du gehst alle Zahlungsmittel durch - und zwar der Größe nach von groß nach klein.
b) Du ermittelst die Anzahl, wie oft das aktuelle Zahlungsmittel ausgegeben wird. Das ist eine einfach int Division. (Und die machen wir nur, wenn der Restbetrag groß genug ist)
c) Der Restbetrag ist dann einfach der Rest der Division. Also der Reminder Operator kann hier sehr gut verwendet werden.

Und dann bitte immer auf halbwegs sauberen Code achten:
  • sinnvolle Bezeichner!
  • Sprachelemente so nutzen, wie diese angedacht waren. Die Zählschleife ist als Zählschleife angedacht - Und da verändert man im Body nicht den Zähler. Das sind Dinge, die ein Entwickler beim betrachten des Codes nicht erwartet und daher sollte man sowas schlicht nicht machen ...
Wobei die Lösung nicht ganz sauber ist :D
Bei Eingabe von 500 werden mir 2 200er und 2 50er zurückgegeben, anstatt einen 500er :)
Java:
 if (restbetrag >= aktuellesZahlungsmittel) {
...müsste es wohl heißen.

Und eig. wäre doch eine While-Schleife im Sinne von
Java:
while (restbetragVorhanden(rest)){
   
}
sinnvoller, da ansonten die weiteren Elemente durchgegangen werden, obwohl es ggf. keinen Restbetrag mehr gibt. :)

Aber okay, bei so kleinen Übungsaufgaben bzw. als Anfänger mag das noch nicht tragisch sein.
Wobei...
evtl. gewöhnt man sich so falsche Prinzipien an 😬
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Java:
if (restbetrag >= aktuellesZahlungsmittel) {
...müsste es wohl heißen.
Ja, das sind so kleine Fehler die schnell mal unterlaufen, wenn man ohne Tests arbeitet. Gut erkannt.

Und eig. wäre doch eine While-Schleife im Sinne von
Java:
while (restbetragVorhanden(rest)){

}
sinnvoller, da ansonten die weiteren Elemente durchgegangen werden, obwohl es ggf. keinen Restbetrag mehr gibt. :)
Das dürfte davon abhängen, wie man die Aufgabe verstanden hat. Wenn man als Lösung ansieht, dass man alle Zahlungsmittel der Größe nach durchgeht, dann wäre die for-each Schleife vermutlich die lesbare Lösung.

Das Problem ist eher diese if Anweisung, denn das macht es schon deutlich unleserlicher, da ist eine Unterteilung in Methoden durchaus sinnvoll. Aber gerade am Anfang sind diesbezüglich die Anforderungen noch nicht da. Das macht aus meiner Sicht auch erst dann Sinn, wenn man mehr mit Klassen macht, da nur dann eine wirklich gute Unterteilung in Methoden möglich ist. (Dein restbetragVorhanden()) braucht ja den restbetrag - das ist aber als lokale Variable eher problematisch...)
 

Ähnliche Java Themen

Neue Themen


Oben