Geldscheinausgabe mit möglichst wenig Scheinen

Kaktusfan123

Mitglied
Hallo in die Runde :)

wir sollen einen Automaten programmieren, der den Betrag aus möglichst wenig Scheinen ausgibt.
Wichtig dabei ist, dass der Betrag nur auf 5 oder 0 enden darf (weil er nur Scheine ausgibt).
Weitere Bedingung: nicht mehr als max. 4 Variablen verwenden.

Java:
import java.util.Scanner;
public class Automat
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

System.out.println("***********************************");
System.out.println("Hinweis: Dieser Automat gibt nur Scheine aus!");

int betrag;

System.out.println("Bitte geben Sie den gewünschten Betrag ein: \t Mindestbetrag 5 Euro");
betrag = sc.nextInt();

int schein200 = betrag / 200;
betrag = betrag % 200;

int schein100 = betrag / 100;
betrag = betrag % 100;

int schein50 = betrag / 50;
betrag = betrag % 50;

int schein20 = betrag / 20;
betrag = betrag % 20;

int schein10 = betrag / 10;
betrag = betrag % 10;

int schein5 = betrag / 5;
betrag = betrag % 5;

System.out.println("***********************************\nAusgabe: ");
System.out.println(schein200 + " x 200 Euro");
System.out.println(schein100 + " x 100 Euro");
System.out.println(schein50 + " x 50 Euro");
System.out.println(schein20 + " x 20 Euro");
System.out.println(schein10 + " x 10 Euro");
System.out.println(schein5 + " x 5 Euro");
System.out.println("***********************************");
}
}

Dies wäre nun mein Code, jedoch mit 7 Variablen.
Kann mir jemand weiterhelfen und mir sagen, wie ich die Variablen verringern kann? :/
Finde es etwas komisch, da es ja allein schon 6 Scheine sind, wie soll man diese auf 4 kürzen?

(Die Aufgabe gehört zu einem Kapitel, in dem wir noch keine Schleifen, Verzweigungen etc. behandelt haben)

Würde mich über Hilfe sehr freuen :)
 

Robert Zenz

Top Contributor
Ich kann mich nicht entscheiden ob die Aufgabenstellung Ugh oder gut ist.

Zunaechst mal, du hast da ein recht schoenes, uebersichtliches Programm auf die Beine gestellt. Fehlerbehandlung fehlt noch, aber die kann man auch vernachlaessigen bei den Uebungen. Nun, um die Aufgabenstellung zu erfuellen (nur 4 Variablen) musst du deine schoene Struktur etwas ueber den Haufen werfen, du musst einfach Ausgabe und Berechnung mischen. Dann kannst du ein und die selbe Variable fuer die Scheinanzahl verwenden.
 

White_Fox

Top Contributor
Kann mir jemand weiterhelfen und mir sagen, wie ich die Variablen verringern kann? :/
Naja, anstelle von int schein200, int schein100, ... könntest du sowas machen:

Java:
int remainingMoney;
int banknotes;

//...fülle remainingMoney mit einem Betrag

banknotes = remainingMoney / 200;
System.out.println("200-Scheine: " + banknotes);
remainingMoney = remainingMoney % 200;

banknotes = remainingMoney / 100;
System.out.println("100-Scheine: " + banknotes);
remainingMoney = remainingMoney % 100;

//...


Edit:
Verdammt, war der Robert schneller...
 

Kaktusfan123

Mitglied
Naja, anstelle von int schein200, int schein100, ... könntest du sowas machen:

Java:
int remainingMoney;
int banknotes;

//...fülle remainingMoney mit einem Betrag

banknotes = remainingMoney / 200;
System.out.println("200-Scheine: " + banknotes);
remainingMoney = remainingMoney % 200;

banknotes = remainingMoney / 100;
System.out.println("100-Scheine: " + banknotes);
remainingMoney = remainingMoney % 100;

//...


Edit:
Verdammt, war der Robert schneller...
Dankeschön für die schnelle Hilfe! :)
 

Kaktusfan123

Mitglied
Ich kann mich nicht entscheiden ob die Aufgabenstellung Ugh oder gut ist.

Zunaechst mal, du hast da ein recht schoenes, uebersichtliches Programm auf die Beine gestellt. Fehlerbehandlung fehlt noch, aber die kann man auch vernachlaessigen bei den Uebungen. Nun, um die Aufgabenstellung zu erfuellen (nur 4 Variablen) musst du deine schoene Struktur etwas ueber den Haufen werfen, du musst einfach Ausgabe und Berechnung mischen. Dann kannst du ein und die selbe Variable fuer die Scheinanzahl verwenden.
Dankeschön für die schnelle Hilfe! :) hat geklappt
 

Ernesto95

Aktives Mitglied
Warum nicht einfach die println Aufrufe direkt hinter jede Berechnung statt gesammelt am Ende ?

Dann braucht man statt 6 int Variablen für die Scheine nur eine Variable und kann die immer wieder verwenden.

Wobei ich die Lösung vom Threaderöffner schon gut strukturiert finde, bis halt auf den Verstoß gegen die Vorgabe der maximalen Anzahl an Variablen.
 

KonradN

Super-Moderator
Mitarbeiter
Ich denke, dass ist dann ein geeignetes Beispiel für ein Refactoring:

Wenn man sich diesen Codeabschnitt ansieht:
Java:
int schein200 = betrag / 200;
betrag = betrag % 200;

int schein100 = betrag / 100;
betrag = betrag % 100;

int schein50 = betrag / 50;
betrag = betrag % 50;

int schein20 = betrag / 20;
betrag = betrag % 20;

int schein10 = betrag / 10;
betrag = betrag % 10;

int schein5 = betrag / 5;
betrag = betrag % 5;

Dann sieht man unter dem Strich einfach eine Wiederholung vom eigentlich gleichen Code. Doppelten Code mag man nun einmal nicht als Entwickler. Bei nur 2 Zeilen, die sich wiederholen mag es uninteressant sein, aber es geht mir ja jetzt um das Refactoring selbst.

Das schreit also somit etwas nach einem Refactoring und das ginge mit Liste oder Array:

Java:
List<Integer> scheinGroessen = List.of(200, 100, 50, 20, 10, 5);
List<Integer> scheinAnzahl = new ArrayList<Integer>();

for (int scheinGroesse : scheinGrößen) {
    scheinAnzahl.add(betrag / scheinGroesse);
    betrag = betrag % scheinGroesse;
}

Das wäre mit ein Punkt, den ich bei so Code sehe. Aber ja - der Code vom TE ist so schon recht gut lesbar.
 

Neue Themen


Oben