Betrag in Münzen aufteilen

Status
Nicht offen für weitere Antworten.
M

MikeP

Gast
Hallo,

ich brauch dringend Hilfe. Bin ganz "frisch" auf den Java gebiet.

Hab eine Aufgaben, in der ich einen Betrag ( in Cent, also maximal 99 Cent) in so wenig wie
möglich Münzen aufteilen muss.

Aufg.:
Schreiben Sie zur Klasse ”zaehler”


eine Methode ”wechseln()”, um die dem Wert von stand (in Cent) entsprechende Anzahl von Münzen am Bildschirm auszugeben (wie muss der Wertebereich beschränkt werden?).
Schreiben Sie ein geeignetes Hauptprogramm, das einen gültigen Währungsbetrag in „stand“ ablegt und anschließend „wechseln()“ ausführt.

Hinweis: Am einfachsten ist die Ermittlung der minimalen Anzahl von Münzen!

Versuchen Sie, möglichst wenig Anweisungen zu verwenden.
 
M

MikeP

Gast
Hier mal meine ersten Versuche, die aber alle nicht zum richtigen Ergebnis führen:

1.

public class Zaehler {

int stand;

public Zaehler()
{
stand = 0;
}



public void wechseln()
{
if(stand < 100)
{ if(stand%50 >= 1)
{ System.out.println(stand/50); }

if(stand%70 >= 1)
{ System.out.println(stand/20); }

if(stand%10 >= 1)
{ System.out.println(stand/10); }

if(stand%5 >= 1)
{ System.out.println(stand/5); }

if(stand%2 >= 1)
{ System.out.println(stand/2); }

if(stand%1 >= 1)
{ System.out.println(stand/1); }

}

else {System.out.println("Der Cent-Betrag darf max. 99 sein.");}





}
}



2.

public void wechseln()
{

if(stand-50 > 0) {
System.out.println("Anzahl 50 Cent Münzen: " + (stand/50));
stand = stand - 50; }

if(stand-40 > 0) {
System.out.println("Anzahl 20 Cent Münzen: " + (stand/20));
stand = stand-40; }

if(stand-20 > 0) {
System.out.println("Anzahl 10 Cent Münzen: " + (stand/10));
stand = stand-20;}

if(stand-10 > 0) {
System.out.println("Anzahl 5 Cent Münzen: " + (stand/5));
stand = stand-10;}


if(stand-4 > 0) {
System.out.println("Anzahl 2 Cent Münzen: " + (stand/2));
stand = stand-4;}

if(stand-2 > 0) {
System.out.println("Anzahl 1 Cent Münzen: " + (stand/1));
stand = stand-2;}
}


3.

public void wechseln()


{

stand = stand/50;
System.out.println(" Anzahl 50 Cent Münzen: " + stand);
stand = stand/5;
System.out.println(" Anzahl 20 Cent Münzen: " + stand);
stand = stand/10;
System.out.println(" Anzahl 10 Cent Münzen: " + stand);
stand = stand/20;
System.out.println(" Anzahl 5 Cent Münzen: " + stand);
stand = stand/50;
System.out.println(" Anzahl 2 Cent Münzen: " + stand);
stand = stand/100;
System.out.println(" Anzahl 1 Cent Münzen: " + stand);

}




Meine main sieht dann so aus:

public class Startklasse {

public static void main(String[] args) {

Zaehler z1 = new Zaehler ();

z1.stand = 99; //z.B.
z1.wechseln();
}

}



Ich weiß nämlich auch nicht genau wie die Rechnung in Detail geht.
Zunächst muss ich doch die Zahl (stand) durch 50 Teilen, denn das 50 Cent stück ist
ja bekanntlich das kleinste unter dem Euro.
Dann das 20 Cent Stück..usw.

Einen Betrag (stand) in die jeweiligen Münzen aufzuteilen ist ja kein Problem.
Ist ja immer stand/50, stand/20 usw.

Aber ich muss den Betrag in die kleinstmögliche Anzahl an Münzen aufteilen.
Wollt es erst mit einer for-Schleife probieren, aber ich muss ja jedes mal
eine andere Rechnung machen. Deshalb kam ich da auch nicht weiter.
 

Landei

Top Contributor
Die Grundidee (mit dem größten Stüch anfangen) ist schon halbwegs erkennbar, aber es geht viel einfacher:

Code:
int stand = ...;

int fuffziger = 0;
while(stand > 50) {
  fuffziger ++; //anzahl fuffziger hoch
  stand -= 50; //betrag entsprechend reduzieren
}

int zwanziger = 0;
while(stand > 20) {
   zwanziger ++;
   stand -= 20;
}

//usw.

Übrigens: [code] -Tags machen den Code hübscher (im Forum)
 
M

MikeP

Gast
Hab jetzt mal ne Lösung gefunden, nach langem probieren.
Aber ist glaub nicht wirklich elegant.

Hier also nur die methode:

public void wechseln()

if(stand > 50) {
System.out.println("Anzahl 50 Cent Münzen: " + (stand/50));
stand = stand - 50; }

if(stand >= 40) {
System.out.println("Anzahl 20 Cent Münzen: " + (stand/20));
stand = stand-40; }



if(stand >= 10) {
System.out.println("Anzahl 10 Cent Münzen: " + (stand/10));
stand = stand-10;}

if(stand >= 5) {
System.out.println("Anzahl 5 Cent Münzen: " + (stand/5));
stand = stand-5;}


if(stand >= 4) {
System.out.println("Anzahl 2 Cent Münzen: " + (stand/2));
stand = stand-4;}

if(stand >= 1) {
System.out.println("Anzahl 1 Cent Münzen: " + (stand/1));
stand = stand-1;}
}


MFG
 
M

MikeP

Gast
Sorry...die letzten zwei Anweisungen müssen so aussehen:

if(stand >= 2) {
System.out.println("Anzahl 2 Cent Münzen: " + (stand/2));
stand = stand-2;}

if(stand == 1) {
System.out.println("Anzahl 1 Cent Münzen: " + (stand/1));
stand = stand-1;}
 

Marco13

Top Contributor
Teste das mal mit 70 cent. (Tipp: While statt if ...).

Eleganter machen könnte man es auch, ja...
 
M

MikeP

Gast
Vielen Dank. Jetzt hab ich nur ein Problem.
Er subtrahiert zwar aber auf der Console wird nichts ausgegeben.

Code:
int fuffziger = 0;
while(stand > 50) {
	System.out.println("Anzahl Fünfziger: " + (fuffziger++)); 
  stand -= 50;



Console

Anzahl Fünfziger : 0


(Bei einem stand = 89; der eingegeben wurde)
 
S

SlaterB

Gast
warum solche Experimente mit der Auswertungsreihenfolge?
schreibe

fuffziger++;
System.out.println("Anzahl Fünfziger: " + fuffziger);

und nichts kann schiefgehen

------

ansonsten wäre hier
System.out.println("Anzahl Fünfziger: " + (++fuffziger));
angebracht
 

mahe

Aktives Mitglied
In der Schleife ist das auch ziemlich blöd. Man sollte in der Schleife nur fuffziger++; stehen haben und die Ausgabe nach der Schleife machen.

Oder natürlich statt der Schleife das Problem einfach mit dem Modulo-Operator lösen ...
 
M

MikeP

Gast
Jep, hab ich beim Testen auch gemerkt.
Thx.
So passt alles:

Code:
public class Zaehler {

	 int stand;
	
	public Zaehler()
	{
		stand = 0;
	}
		
	public void wechseln()
	{
		if(stand < 100)
		{ 
       int fuffziger = 0 ;
	while(stand >= 50) {
	fuffziger++;
	System.out.println("Anzahl Fünfziger: " + fuffziger); //anzahl fuffziger hoch
	stand -= 50;} //betrag entsprechend reduzieren
  
	int zwanziger = 0;
	while(stand >= 20) {
	zwanziger++;
	stand -= 20;}
	System.out.println("Anzahl Zwanziger: " + zwanziger);
   
	int zehner = 0;
	while(stand >= 10) {
	zehner++;
	stand -= 10;}
	System.out.println("Anzahl Zehner: " + zehner);
	
	int funfer = 0;
	while(stand >= 5) {
     funfer++; 
       stand -= 5;}
	System.out.println("Anzahl Fünfer: " + funfer);
         
	int zweier = 0;
    while(stand >= 2) {
     zweier++; 
      stand -= 2;}
    System.out.println("Anzahl Zweier: " + zweier);
	
	
      int einer = 0;
      while(stand >= 1) {
       einer++;
        stand -= 1;}
      System.out.println("Anzahl Einer: " + einer);

                   }
       }
}


und noch die main:

public class Startklasse {

	public static void main(String[] args) {

		Zaehler z1 = new Zaehler ();
		
		z1.stand = 91; //z.B.	
		z1.wechseln();
	}

}

thx @ all
 

ARadauer

Top Contributor
ich würd das so machen....
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test{
   
   public static int[] muenzen = {50, 20, 10, 5, 2 ,1};
   public static int[] anzahl = new int[muenzen.length];

   public static void main(String[] args) throws NumberFormatException, IOException {
     BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
     int wert = Integer.valueOf(r.readLine());
     int pos = 0;
     while(wert>0){
        if(wert<muenzen[pos]){
           pos++;
        }else{
           anzahl[pos]++;
           wert = wert - muenzen[pos];
        }
     }     
     for(int i =0; i <muenzen.length; i++){
        System.out.println(muenzen[i]+" "+anzahl[i]);       
     } 
   }
}
 

André Uhres

Top Contributor
Oder so:
Code:
int[] muenzen = {50, 20, 20, 10, 5, 2, 2, 1};
for (int muenze : muenzen) {
    if (stand >= muenze) {
        System.out.println(muenze);
        stand -= muenze;
    }
}
 

Marco13

Top Contributor
Wobei letzteres mit 90 Cent doch auch nicht die richtige Ausgabe liefert, oder ???:L (Auch hier müßte doch while stattt if stehen?!)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bluedaishi Einen Betrag X auf X Tage verteilen Java Basics - Anfänger-Themen 14
S Operatoren Subtraktion von Dualzahlen Vorzeichen/Betrag Java Basics - Anfänger-Themen 3
M Absoluter Betrag Java Basics - Anfänger-Themen 4
G Nr eingeben - Betrag wird angezeigt Java Basics - Anfänger-Themen 9
W Betrag eines Vektors Java Basics - Anfänger-Themen 13
S Wie bekomme ich absolute Werte (Betrag einer Zahl)? Java Basics - Anfänger-Themen 5
H Betrag in Münzwerte stückeln Java Basics - Anfänger-Themen 4
J Verdoppeln einer Zahl (in dem Fall Münzen) Java Basics - Anfänger-Themen 4
A Java Münzen Schleife Java Basics - Anfänger-Themen 8
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
M Wie kann ich ein Array in zwei Hälften aufteilen? Java Basics - Anfänger-Themen 12
A Files aufteilen Java Basics - Anfänger-Themen 4
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
CptK Variablen ArrayList aufteilen Java Basics - Anfänger-Themen 2
T Zahlen aufteilen Java Basics - Anfänger-Themen 2
R Frage: Aufteilen der GUI Java Basics - Anfänger-Themen 3
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
F Methoden Java String aufteilen Java Basics - Anfänger-Themen 17
MiMa Aufteilen in Classen Java Basics - Anfänger-Themen 5
J Hochzahlen aufteilen Java Basics - Anfänger-Themen 3
N Input/Output .txt-Datei einlesen, aufteilen und seperat abspeichern Java Basics - Anfänger-Themen 3
D String in Integer Array aufteilen Java Basics - Anfänger-Themen 12
K arraylist zufällig aufteilen Java Basics - Anfänger-Themen 5
L Array aufteilen Java Basics - Anfänger-Themen 3
L Matrizen aufteilen Java Basics - Anfänger-Themen 3
L Array aufteilen Java Basics - Anfänger-Themen 13
D Java Download in mehrere Parts aufteilen Java Basics - Anfänger-Themen 2
D 100.0% gleichmäßig aufteilen, so dass Summe 100.0% sind, nicht 99,9% oder 100,1% Java Basics - Anfänger-Themen 3
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
M Programm in zwei Klassen aufteilen? Java Basics - Anfänger-Themen 8
M Sekunden aufteilen Java Basics - Anfänger-Themen 5
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
K String aufteilen Java Basics - Anfänger-Themen 11
L In metoden/classen aufteilen (weniger im main) Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben