Hallo, ich habe ein problem mit meinem Programm. Ich möchte gerne einen bestimmten Betrag eingeben, und diese aufteilen in 2€ stücken 1€ stücken unsw bis 1 cent.
Ich habe es auch soweit fertig, nur beim ausprobieren fiel mir auf das er manchmal ein falsches Ergebnis liefert. Ich denke es liegt am runden, wie umgehe ich das ?
Hier einmal meine Klasse mit den Berechnungen, und darunter meine main klasse:
[Java]
package gelder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Geldwechselautomat {
/**
* ***************
* Constructor
* ***************
*/
Geldwechselautomat() {
do {
System.out.print("Eingabe: ");
umrechnung(einlesen());
System.out.print(ausgabe());
System.out.print("Weiter? (j/n): ");
} while(repeatEinlesen() == true);
}
String ausgabe[] = new String[8]; // Dieses Array wird zum Abspeichern des Ergebnisses benötigt
String line[] = new String[2]; // Der eingegebene betrag wird geteilt und in line[] gespeichert
/**
* ******************************************************************
* Diese Prozedur rechnet den Betrag um, und speichert das Ergebnis in das Feld
* ausgabe[] ab.
* @param f
* ********************************************************************
*/
void umrechnung(double f) { // Umrechnung des Betrages abspeichern des Wertes in ausgabe[]
int z = 0;
// 2 Möglichkeiten der Eingabe
// entweder in € oder Cent
if (line[1].contains("€")) {
while (f / 2.00d >= 1) {
z++;
f = f - 2.00d;
}
ausgabe[0] = z + " Münze(n) zu 2,00 € \n";
z = 0;
while (f / 1.00d >= 1) {
z++;
f = f - 1.00d;
}
ausgabe[1] = z + " Münze(n) zu 1,00 €\n";
z = 0;
while (f / 0.50d >= 1) {
z++;
f = f - 0.50d;
}
ausgabe[2] = z + " Münze(n) zu 50 Cent\n";
z = 0;
while (f / 0.20d >= 1) {
z++;
f = f - 0.20d;
}
ausgabe[3] = z + " Münze(n) zu 20 Cent\n";
z = 0;
while (f / 0.10d >= 1) {
z++;
f = f - 0.10d;
}
ausgabe[4] = z + " Münze(n) zu 10 Cent\n";
z = 0;
while (f / 0.05d >= 1) {
z++;
f = f - 0.05d;
}
ausgabe[5] = z + " Münze(n) zu 5 Cent\n";
z = 0;
while (f / 0.02d >= 1) {
z++;
f = f - 0.02d;
}
ausgabe[6] = z + " Münze(n) zu 2 Cent\n";
z = 0;
while (f / 0.01d >= 1) {
z++;
f = f - 0.01d;
}
ausgabe[7] = z + " Münze(n) zu 1 Cent\n";
} else if (line[1].contains("cent")) {
while (f / 200.00f >= 1) {
z++;
f = f - 200.00f;
}
ausgabe[0] = z + " Münze(n) zu 2,00 € \n";
z = 0;
while (f / 100.00f >= 1) {
z++;
f = f - 100.00f;
}
ausgabe[1] = z + " Münze(n) zu 1,00 €\n";
z = 0;
while (f / 50.00f >= 1) {
z++;
f = f - 50.00f;
}
ausgabe[2] = z + " Münze(n) zu 50 Cent\n";
z = 0;
while (f / 20.00f >= 1) {
z++;
f = f - 20.00f;
}
ausgabe[3] = z + " Münze(n) zu 20 Cent\n";
z = 0;
while (f / 10.00f >= 1) {
z++;
f = f - 10.00f;
}
ausgabe[4] = z + " Münze(n) zu 10 Cent\n";
z = 0;
while (f / 5.00f >= 1) {
z++;
f = f - 5.00f;
}
ausgabe[5] = z + " Münze(n) zu 5 Cent\n";
z = 0;
while (f / 2.00f >= 1) {
z++;
f = f - 2.00f;
}
ausgabe[6] = z + " Münze(n) zu 2 Cent\n";
z = 0;
while (f / 1.00f >= 1) {
z++;
f = f - 1.00f;
}
ausgabe[7] = z + " Münze(n) zu 1 Cent\n";
} else {
// Falsche Eingabe
}
}
/**
* *************************************************
* Diese Funktion gibt das
* Array ausgabe[] aus
*
* @return
****************************************************/
String ausgabe() {
String text = "";
for (int i = 0; i <= 7; i++) {
text += ausgabe;
}
return text;
}
/**
* *******************************************
* Diese Hilfsmethode liest eine Zeile von der Konsole ein
* @return eingelesene Zeile als String
* *******************************************
*/
double einlesen() {
try {
BufferedReader Tast = new BufferedReader(new InputStreamReader(System.in));
line = Tast.readLine().split(" ");
} catch (Exception e) {
}
return asDouble(line[0]);
}
/**
* *******************************************
* Diese Hilfsmethode liest eine Zeile von der Konsole ein
* @return eingelesene Zeile als String
* *******************************************
*/
boolean repeatEinlesen() {
boolean repeat = false;
try {
BufferedReader Tast = new BufferedReader(new InputStreamReader(System.in));
if (Tast.readLine().equalsIgnoreCase("j")) {
repeat = true;
} else if (Tast.readLine().equalsIgnoreCase("n")) {
repeat = false;
}
//Fange alle restlichen Ausnahmefehler ab
} catch (Exception e) {
}
return repeat;
}
/**
* *********************************************
* Diese Hilfsmethode wandelt
* einen String in eine float Zahl um
* @return Zahlenwert des Strings, wenn gültig, sonst -1111
************************************************
*/
static double asDouble(String s) {
double f;
try {
f = Double.parseDouble(s);
} catch (Exception e) {
f = -1111;
}
return f;
}
}
[/code]
main Klasse:
Ich habe es auch soweit fertig, nur beim ausprobieren fiel mir auf das er manchmal ein falsches Ergebnis liefert. Ich denke es liegt am runden, wie umgehe ich das ?
Hier einmal meine Klasse mit den Berechnungen, und darunter meine main klasse:
[Java]
package gelder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Geldwechselautomat {
/**
* ***************
* Constructor
* ***************
*/
Geldwechselautomat() {
do {
System.out.print("Eingabe: ");
umrechnung(einlesen());
System.out.print(ausgabe());
System.out.print("Weiter? (j/n): ");
} while(repeatEinlesen() == true);
}
String ausgabe[] = new String[8]; // Dieses Array wird zum Abspeichern des Ergebnisses benötigt
String line[] = new String[2]; // Der eingegebene betrag wird geteilt und in line[] gespeichert
/**
* ******************************************************************
* Diese Prozedur rechnet den Betrag um, und speichert das Ergebnis in das Feld
* ausgabe[] ab.
* @param f
* ********************************************************************
*/
void umrechnung(double f) { // Umrechnung des Betrages abspeichern des Wertes in ausgabe[]
int z = 0;
// 2 Möglichkeiten der Eingabe
// entweder in € oder Cent
if (line[1].contains("€")) {
while (f / 2.00d >= 1) {
z++;
f = f - 2.00d;
}
ausgabe[0] = z + " Münze(n) zu 2,00 € \n";
z = 0;
while (f / 1.00d >= 1) {
z++;
f = f - 1.00d;
}
ausgabe[1] = z + " Münze(n) zu 1,00 €\n";
z = 0;
while (f / 0.50d >= 1) {
z++;
f = f - 0.50d;
}
ausgabe[2] = z + " Münze(n) zu 50 Cent\n";
z = 0;
while (f / 0.20d >= 1) {
z++;
f = f - 0.20d;
}
ausgabe[3] = z + " Münze(n) zu 20 Cent\n";
z = 0;
while (f / 0.10d >= 1) {
z++;
f = f - 0.10d;
}
ausgabe[4] = z + " Münze(n) zu 10 Cent\n";
z = 0;
while (f / 0.05d >= 1) {
z++;
f = f - 0.05d;
}
ausgabe[5] = z + " Münze(n) zu 5 Cent\n";
z = 0;
while (f / 0.02d >= 1) {
z++;
f = f - 0.02d;
}
ausgabe[6] = z + " Münze(n) zu 2 Cent\n";
z = 0;
while (f / 0.01d >= 1) {
z++;
f = f - 0.01d;
}
ausgabe[7] = z + " Münze(n) zu 1 Cent\n";
} else if (line[1].contains("cent")) {
while (f / 200.00f >= 1) {
z++;
f = f - 200.00f;
}
ausgabe[0] = z + " Münze(n) zu 2,00 € \n";
z = 0;
while (f / 100.00f >= 1) {
z++;
f = f - 100.00f;
}
ausgabe[1] = z + " Münze(n) zu 1,00 €\n";
z = 0;
while (f / 50.00f >= 1) {
z++;
f = f - 50.00f;
}
ausgabe[2] = z + " Münze(n) zu 50 Cent\n";
z = 0;
while (f / 20.00f >= 1) {
z++;
f = f - 20.00f;
}
ausgabe[3] = z + " Münze(n) zu 20 Cent\n";
z = 0;
while (f / 10.00f >= 1) {
z++;
f = f - 10.00f;
}
ausgabe[4] = z + " Münze(n) zu 10 Cent\n";
z = 0;
while (f / 5.00f >= 1) {
z++;
f = f - 5.00f;
}
ausgabe[5] = z + " Münze(n) zu 5 Cent\n";
z = 0;
while (f / 2.00f >= 1) {
z++;
f = f - 2.00f;
}
ausgabe[6] = z + " Münze(n) zu 2 Cent\n";
z = 0;
while (f / 1.00f >= 1) {
z++;
f = f - 1.00f;
}
ausgabe[7] = z + " Münze(n) zu 1 Cent\n";
} else {
// Falsche Eingabe
}
}
/**
* *************************************************
* Diese Funktion gibt das
* Array ausgabe[] aus
*
* @return
****************************************************/
String ausgabe() {
String text = "";
for (int i = 0; i <= 7; i++) {
text += ausgabe;
}
return text;
}
/**
* *******************************************
* Diese Hilfsmethode liest eine Zeile von der Konsole ein
* @return eingelesene Zeile als String
* *******************************************
*/
double einlesen() {
try {
BufferedReader Tast = new BufferedReader(new InputStreamReader(System.in));
line = Tast.readLine().split(" ");
} catch (Exception e) {
}
return asDouble(line[0]);
}
/**
* *******************************************
* Diese Hilfsmethode liest eine Zeile von der Konsole ein
* @return eingelesene Zeile als String
* *******************************************
*/
boolean repeatEinlesen() {
boolean repeat = false;
try {
BufferedReader Tast = new BufferedReader(new InputStreamReader(System.in));
if (Tast.readLine().equalsIgnoreCase("j")) {
repeat = true;
} else if (Tast.readLine().equalsIgnoreCase("n")) {
repeat = false;
}
//Fange alle restlichen Ausnahmefehler ab
} catch (Exception e) {
}
return repeat;
}
/**
* *********************************************
* Diese Hilfsmethode wandelt
* einen String in eine float Zahl um
* @return Zahlenwert des Strings, wenn gültig, sonst -1111
************************************************
*/
static double asDouble(String s) {
double f;
try {
f = Double.parseDouble(s);
} catch (Exception e) {
f = -1111;
}
return f;
}
}
[/code]
main Klasse:
Java:
package gelder;
class Start {
public static void main(String args[]){
//Ein Objekt erzeugen
Geldwechselautomat geldwechsel = new Geldwechselautomat();
}
}