Münzautomat

sebihsv

Mitglied
Hallo ich studiere Maschinenbau und habe ein Problem bei einer Programmieraufgabe in Java. Ich soll einen Münzautomat programmieren , der einen eingegeben Betrag mit möglichst wenigen Münzen ausgibt. Ich soll Variablen, Felder und Schleifen nutzen. Ich habe schon einen Lösungsansatz, der aber leider nicht zielführend ist. Vielleicht kann mir ja jemand von euch weiterhelfen. Vielen Dank im Vorraus.


Liebe Grüße
Sebi
 

Anhänge

  • Bildschirmfoto 2017-11-29 um 16.07.16.png
    Bildschirmfoto 2017-11-29 um 16.07.16.png
    1 MB · Aufrufe: 152

SchwarzWeiß

Bekanntes Mitglied
Code am besten in Code-Tags posten (Symbolleiste -> Einfügen -> Code -> Java), damit man ihn schneller sehen und zitieren kann.
Was mir aber auf die Schnelle auffällt: deine while-Schleife läuft ewig, da sich betrag und münzwert[index] innerhalb der Schleife niemals ändern. Ich denke du meinst in der Bedingung "restbetrag" anstatt "betrag".
 

krgewb

Top Contributor
Das ist dein Code:
Java:
public class Geldautomat {

    public static void main(String[] args) {

        double betrag = IO.readDouble("Geldbetrag bitte in Euro eingeben:");
        int restbetrag = (int) betrag * 100; // eurobetrag wird mal 100 genommen um es in cent zu bekommen
        int münzwerte[] = { 200, 100, 50, 20, 10, 5, 2, 1 }; // felder werden mit werten gefüllt index=8

        for (int index = 0; index < münzwerte.length; index++) { // schleife läuft von der größten bis zur kleinsten Münze

            System.out.println(münzwerte[index]); // Alle verfügbaren münzen werden ausgegeben

            if (betrag < münzwerte[index]) {
                System.out.println(münzwerte[index]);
            }

            while (betrag >= münzwerte[index]) { // solange der eingegebene betrag größer als münzwert... in den feldern sind
                restbetrag = restbetrag - münzwerte[index]; // restbetrag wird minus münzwerte in den feldern gerechnet
                System.out.println(münzwerte[index]);
            }
        }

    }
}
Ich kann es nicht starten, da ich deine IO-Klasse nicht habe.

Ein paar Tipps:
  • Keine Umlaute in Variablennamen verwenden (-> muenzwerte )
  • Du kannst den Code von Eclipse formatieren lassen. Dadurch werden die Einrückungen automatisch gemacht. Bei mir (Windows) geht das mit STRG + Shift + F.
  • Kommentare am besten nicht ganz rechts von einer Zeile. Durch die automatische Formatierung werden sie abgehackt und erscheinen untereinander.
  • Die Zeile int restbetrag = (int) betrag * 100; führt zu Fehlern. Bei einem Betrag von 12.50 Euro ist der Restbetrag (also derselbe Betrag in Cent) 1200. Richtig wäre 1250. Also werden die Nachkommastellen weggeschmissen.
 
Zuletzt bearbeitet:

sebihsv

Mitglied
ich habe jetzt die math.round funktion eingebaut, sodass die nachkommastellen nicht verloren gehen. kannst du mir sagen wo der fehler im programm liegt?
 

krgewb

Top Contributor
Wie hast du es getestet? Ich habe es wie folgt getestet:
Java:
double betrag = 12.50;
int restbetrag = (int) (betrag * 100);
System.out.println(restbetrag);

Ausgabe:
Code:
1250
 

krgewb

Top Contributor
Wozu dient das?

Wie dem auch sei. Mit welchem Wert hast du es getestet? Bei folgendem Code wird bei mir trotzdem 1250 ausgegeben:
Java:
double betrag = 12.50;       
int restbetrag = (int) (betrag * 100);
restbetrag = (Math.round(restbetrag * 100)) / 100;
System.out.println(restbetrag);
 

sebihsv

Mitglied
Java:
public class Rückgabeautomat {
  public static void main(String[] args) {
    double betrag= IO.readDouble("Bitte betrag in Euro eingeben");
    int restbetrag= (int) (betrag*100);
    restbetrag= (Math.round(restbetrag*100))/100;
    int muenzwerte []= {200,100,50,20,10,5,2,1};
    for(int index=0;index<muenzwerte.length;index++){
      while(restbetrag>=muenzwerte[index]) {
        System.out.println(muenzwerte[index]);
      }
    }
  }
}
 
Zuletzt bearbeitet von einem Moderator:

sebihsv

Mitglied
Ich habe es jetzt gelöst. Danke für eure Hilfe.

Java:
public class Rückgabeautomat {
  public static void main(String[] args) {
    double betrag= IO.readDouble("Bitte betrag in Euro eingeben");
    int restbetrag= (int) (betrag*100);
    restbetrag= (Math.round(restbetrag*100))/100;
    int muenzwerte []= {200,100,50,20,10,5,2,1};
    for(int index=0;index<muenzwerte.length;index++){
      while(restbetrag>=muenzwerte[index]) {
        restbetrag=restbetrag-muenzwerte[index];
        System.out.println(muenzwerte[index]);
      }
    }
  }
}
Code:
1.36
100
20
10
5
1
 
Zuletzt bearbeitet von einem Moderator:

SchwarzWeiß

Bekanntes Mitglied
double betrag= IO.readDouble("Bitte betrag in Euro eingeben");
int restbetrag= (int) (betrag*100);
restbetrag= (Math.round(restbetrag*100))/100;
Bsp: betrag = 1.23 -> restbetrag = 1.23 * 100 = 123 und das passt ja schon
bei betrag = 1.234-> restbetrag = 1.234 * 100 = 123,4 aber durch den Integer-Cast fliegt die Ziffer hinter dem Komma weg. Also alles wie gewünscht.
 

Neue Themen


Oben