Erste Schritte Wechselgeld

Die Aufgabenstellung ist, dass man ein Betrag eingibt und das Programm einem den Betrag in der Form :
1x 5 Euro
2x 1 Euro

Bei zum Beispiel 7 Euro ausgibt.
Ich habe es gelöst in dem ich den Betrag bis null immer verkleinert habe, allerdings habe ich es sehr umständlich gemacht.
Außerdem habe ich noch ein Problem, wenn ich Beträge mit 2 Nachkommastellen eingebe dann hängt das Programm in einer Schleife.
Meine 2 Fragen sind, wie geht es einfacher ? Und wie löse ich das Problem mit der 2. Nachkommastelle ?

Code :
Java:
//
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 05.01.2017
  * @Alex
    etwas kompliziert aber Funktioniert
  */   
         import java.util.Scanner ;
public class MuenzausgabeWechselgeld {
 
  public static void main(String[] args) {
    //Deklaration
  
    Scanner sc = new Scanner(System.in) ;
    System.out.println("Geben sie einen Betrag ein");
    double Betrag = sc.nextDouble() ;
    int versuche = 0  ;
    int Anzahl = 0 ;
    int zaehlen = 0 ;
    int aufzaehlen = 0 ;
    int versuchea = 0 ;
    int versucheb = 0 ;
    int versuchec = 0 ;
    int versuched = 0 ;
    int anzahl = 0 ;
    int Anzahla = 0 ;
    int Anzahlb = 0 ;
    int Anzahlc = 0 ;
    int Anzahld = 0 ;
    int anzahle = 0 ;
    int zahlenreihe = 0 ;
  
    double[] cents = { 0,01, 0,02, 0,05, 0,10, 0,20, 0,50 } ;
    double[] muenzen = { 1,00 , 2,00 } ;
    double[] scheine = { 5,00, 10,00, 20,00, 50,00, 100,00, 200,00, 500,00 } ;
  
    // Rechenprogramm
    do {
    
      while (Betrag>=500) {
        if (Betrag >=500.00) {
        
          versuche = versuche+1  ;
          Betrag = Betrag - 500.00 ;
        
        } // end of while
      }
      System.out.println(versuche + "x" + " 500,00 Euro");
    
      while (Betrag >=200.00) {
        if (Betrag >=200.00) {
          Betrag = Betrag - 200.00;
          Anzahl = Anzahl + 1       ;
        } // end of while
      } // end of if
      System.out.println(Anzahl + "x" +  " 200 Euro");
      while (Betrag >=100.00) {
        if (Betrag >=100.00) {
          aufzaehlen = aufzaehlen + 1 ;
          Betrag = Betrag - 100.00 ;
        } // end of while
      } // end of if
      System.out.println(aufzaehlen + "x" +" 100,00 Euro");
      while (Betrag >=50.00) {
        if (Betrag >=50.00) {
          zaehlen = zaehlen +1  ;
          Betrag = Betrag - 50.00 ;
        } // end of while
      } // end of if
      System.out.println(zaehlen +"x" + " 50,00 Euro");
      while (Betrag>=20.00) {
        if (Betrag>=20.00) {
          versuchea = versuchea + 1 ;
          Betrag = Betrag - 20.00 ;
        } // end of if
      } // end of while
      System.out.println(versuchea + "x" + " 20,00 Euro");
      while (Betrag>=10.00) {
        if (Betrag>=10.00) {
          versucheb = versucheb + 1 ;
          Betrag = Betrag - 10.00 ;
        } // end of if
      } // end of while
      System.out.println(versucheb + "x" + " 10,00 Euro");
      while (Betrag >=5.00) {
        if (Betrag >=5.00) {
          versuchec = versuchec + 1 ;
          Betrag = Betrag - 5.00     ;
        } // end of if
      } // end of while
      System.out.println(versuchec + "x" + " 5,00 Euro");
      while (Betrag >=2.00) {
        if (Betrag >=2.00) {
          versuched = versuched + 1 ;
          Betrag = Betrag - 2.00  ;
        } // end of if
      } // end of while
      System.out.println(versuched + "x" + " 2,00 Euro");
      while (Betrag >=1.00) {
        if (Betrag >=1.00) {
          anzahl = anzahl + 1 ;
          Betrag = Betrag - 1.00   ;
        } // end of if
      } // end of while
      System.out.println(anzahl + "x" + " 1,00 Euro");
      while (Betrag>=0.50) {
        if (Betrag >= 0.50) {
          Anzahla = Anzahla + 1 ;
          Betrag = Betrag - 0.50 ;
        } // end of while
      } // end of if
      System.out.println(Anzahla + "x" + " 50 Cent");
      while (Betrag >= 0.20) {
        if (Betrag >= 0.20) {
          Anzahlb = Anzahlb + 1 ;
          Betrag = Betrag - 0.20 ;
        } // end of if
      } // end of while
      System.out.println(Anzahlb + "x" + " 20 Cent ");
      while (Betrag >= 0.10) {
        if (Betrag >= 0.10) {
          Anzahlc = Anzahlc + 1  ;
          Betrag = Betrag - 0.10 ;
        } // end of if
      } // end of while
      System.out.println(Anzahlc + "x" +" 10 Cent ");
      while (Betrag >= 0.05) {
        if (Betrag>= 0.05) {
          Anzahld = Anzahld + 1  ;
          Betrag = Betrag - 0.05 ;
        } // end of if
      } // end of while
      System.out.println(Anzahld + "x" + " 5 Cent ");
      while (Betrag >= 0.02) {
        if (Betrag >= 0.02) {
          anzahle = anzahle + 1  ;
          Betrag = Betrag - 0.02 ;
        } // end of while
      } // end of if
      System.out.println(anzahle + "x" + " 2 Cent ");
      while (Betrag >= 0.01) {
        if (Betrag >= 0.01) {
          zahlenreihe = zahlenreihe + 1  ;
          Betrag = Betrag -0.01 ;
        
        } // end of if
      } // end of while
      System.out.println(zahlenreihe + "x" + " 1 Cent");
    } while (Betrag !=0); // end of do-while 
  
  
  } // end of main
 
} // end of class MuenzausgabeWechselgeld
 

MarzAttak

Mitglied
Mein Vorschlag:
1. Trenne den Geldbetrag, der aufgeteilt werden soll in Vorkomma und Nachkommabereich und speichere die jeweil in einem int (das ist wichtig, dass es int ist).
Die Trennung geht wie folgt:
Vor: (int)x
Nach: x%1
(Danke für den Trick an den Müden Joe hier aus dem Forum).
2. Drehe deine Arrays für Scheine und Münzen um, so dass die großen Werte vorne stehen und die kleinen hinten. Die Cents machst du auch zu Integern (ein Cent = 1, zwei Cent = 2 usw.)
3. Jetzt machst du dir eine foreach-Schleife für jedes Array, erst Scheine, dann Münzen, dann Cent (also absteigend vom größten Wert zum kleinsten). z.B.
Java:
for (int schein : scheine) {}
4. In jeder Schleife teilst du den Geldbetrag durch den gerade bearbeiteten Scheinwert
Java:
int anzahlVorkommen = vorkommaBetrag / schein;
In anzahlVorkommen steht jetzt die Anzahl, wie oft der Schein in diesen Betrag hineinpasst. Da es sich um eine Integerdivision handelt (deswegen wichtig, dass alles Int-Werte sind) wird der Nachkommarest ignoriert.
5. Diese Anzahl des Vorkommens merkst du dir in irgend einer Variablen, Array oder was auch immer (anbieten würde sich hier wohl am ehesten ein Dictionary, aber mit denen kenne ich mich auch noch nicht so gut aus). Dann ziehst du anzahlVorkommen*schein von deinem Geldbetrag ab: der Geldbetrag wird also um die Summe verringert, die wir gerade für diese Scheinart ausgerechnet haben. Falls der Schein zu groß für den Geldbetrag war, ist anzahlVorkommen Null und es wird demgemäß nix abgezogen. Damit die ganze Sache funktioniert musstest du deine Arrays wertmäßig umdrehen, damit die foreach-Schleife mit dem größten Wert anfängt und sich dann nach unten durcharbeitet.
6. Das Spielchen machst du auch mit den Münzen und dann für den Nachkommabereich mit den Cents
7. Gib deine Ergebnisse aus (kannst du auch schon in den Schleifen machen) und feddich...

Ob das die beste Lösung ist, weiß ich nicht, aber so würde ich es lösen.
 

Neue Themen


Oben