# Berechnung von Geldausgabe



## deni100 (31. Okt 2010)

Hallo Jungs und Mädels, beim Lernen habe ich wieder nicht mehr weitergewusst.



```
package geldbetrag;

public class Geldbetrag {
	int betrag,rest,anzahlhunderter,ergebnis;
	int anzahlZehnEuro,anzahlFuenfEuro,anzahlZweiEuro,anzahlEinEuro;
		
public void geldBetragEinlesen(){
	betrag = 23;
	
}
public void geldBetragBerechnen(){
	betrag= rest;
	anzahlZehnEuro= betrag/10;
	rest=rest % 10;
	anzahlFuenfEuro=betrag/5;
	rest=rest %5;
	anzahlZweiEuro=betrag%2;
	rest=rest %2;
	anzahlEinEuro = rest;
		
}
public void geldBetragAusgeben(){
	System.out.println("Der Betrag vom Betrag  wird ausgezahlt in:");
	System.out.println("Zehn Euro Scheine " + anzahlZehnEuro);
	System.out.println("Fuenf Euro Scheine " + anzahlFuenfEuro);
	System.out.println("Zwei Euro Münzen "+ anzahlZweiEuro);
	System.out.println("Ein Euro Münzen" + anzahlEinEuro);
}
}
```

Das ist der Code, das Ziel ist es z.B wenn 23 eingegeben wurde zu sagen . Man braucht 2 Zehn Euro Scheine und 1 Zwei Euro Münze und eine Ein Euro Münze. Was mache ich wieder falsch. Bitte in dem Schema des Programmes helfen, den sowas muss ich in der KA auch müssen.
Danke schonmal für Hilfen .


----------



## Eldorado (31. Okt 2010)

Was soll denn dass:

```
betrag= rest;
```
Damit überschreibst du doch den Betrag mit 0...


----------



## deni100 (31. Okt 2010)

Eldorado hat gesagt.:


> Was soll denn dass:
> 
> ```
> betrag= rest;
> ...



Danke, nachdem ich das weggemacht habe, kam jetzt eine Antwort.
Ich habe 23 eingegeben:

Der Betrag vom Betrag  wird ausgezahlt in:
Zehn Euro Scheine 2
Fuenf Euro Scheine 4
Zwei Euro Münzen 1
Ein Euro Münzen0

Das ist rausgekommen.

Es muss aber :
Der Betrag vom Betrag  wird ausgezahlt in:
Zehn Euro Scheine 2
Fuenf Euro Scheine 0
Zwei Euro Münzen 2
Ein Euro Münzen1

Wie krieg ich das hin . Danke für die Antworten


----------



## Eldorado (31. Okt 2010)

Also das:

```
anzahlZweiEuro=betrag%2;
```
sollte bestimmt auch:

```
anzahlZweiEuro=betrag/2;
```

Lass dir einfach mal mit  System.out.println(); die verschiedenen Reste ausgeben, dann sieht man den Fehler bestimmt sofort.


----------



## bandy (31. Okt 2010)

deni100 hat gesagt.:


> Hallo Jungs und Mädels, beim Lernen habe ich wieder nicht mehr weitergewusst.
> 
> 
> 
> ...



Ich wuerde das in einer if-Abfrage programmieren.


```
if((betrag>0)&&(betrag<5))
...dann...

if((betrag>5)&&(betrag<10))
...dann...

if((betrag>10)&&(betrag<20))
...dann...

if((betrag>20)&&(betrag<50))
...dann...
```


----------



## Eldorado (31. Okt 2010)

Warum denn? Seine Lösung ist meiner Meinung nach schöner..


----------



## deni100 (31. Okt 2010)

Ich muss das ja auch in der Klassenarbeit und mit If will ich das nicht machen, da wir das nicht durchgemacht haben und mir deswegen vllt Abzüge geben könnte.



```
anzahlFuenfEuro=betrag/5;
	rest=rest %5;
```

Da fängt der Fehler an nach der Zeile 

```
anzahlZehnEuro= betrag/10;
	rest=rest % 10;
```
Hier kommt ja die 2 wenn ich 23 eingebe, danach kackt es aber bei der % 5 ab.


----------



## Eldorado (31. Okt 2010)

Was heißt es "kackt ab". Wäre schön, wenn du Ausgabe posten würdest


----------



## deni100 (31. Okt 2010)

Eldorado hat gesagt.:


> Was heißt es "kackt ab". Wäre schön, wenn du Ausgabe posten würdest



Die Ausgabe ist

Der Betrag vom Betrag  wird ausgezahlt in:
Zehn Euro Scheine 2
Fuenf Euro Scheine 4
Zwei Euro Münzen 11
Ein Euro Münzen0


----------



## Eldorado (31. Okt 2010)

Nein, ich meinte die Ausgabe der Reste 


Eldorado hat gesagt.:


> Lass dir einfach mal mit  System.out.println(); die verschiedenen Reste ausgeben, dann sieht man den Fehler bestimmt sofort.


----------



## Eldorado (31. Okt 2010)

Ach, ich hab aber auch auf dem Schlauch gestanden. Die Zeile musstest du einfach nur rumdrehen und dann halt überall rest benutzen.

```
rest = betrag;
    anzahlZehnEuro= rest/10;
    rest=rest % 10;
    anzahlFuenfEuro=rest/5;
    rest=rest %5;
    anzahlZweiEuro=rest/2;
    rest=rest %2;
    anzahlEinEuro = rest;
```
Dann sollte es funktionieren. Rest ist die ganze Zeit 0


----------



## deni100 (31. Okt 2010)

Eldorado hat gesagt.:


> Nein, ich meinte die Ausgabe der Reste





Wie mache ich das , verstehe ich nicht ganz, da kommt bei jedem Rest die Zahl 0.


----------



## Eldorado (31. Okt 2010)

Genau das ist das Ergebnis was wir brauchten, dass eben der Rest immer 0 ist.^^


----------



## deni100 (31. Okt 2010)

Eldorado hat gesagt.:


> Genau das ist das Ergebnis was wir brauchten, dass eben der Rest immer 0 ist.^^



ICh komme nicht mehr weiter, was muss ich jetzt machen ?


----------



## ARadauer (31. Okt 2010)

bandy hat gesagt.:


> Ich wuerde das in einer if-Abfrage programmieren.
> 
> 
> ```
> ...



generell, wenn man irgendwie code verdopplung drinen hat, was ja hier der fall ist, sollte man immer schaun ob man das nicht irgendwie vereinfachen kann. besonders bei solchen dingen mit zahlen, kann man sich super mit arrays helfen


hier ein beispiel:


```
public class Geldbetrag {
	int betrag;

	int[] werte = { 100, 50, 20, 10, 5, 1 };
	int[] anzahl = new int[werte.length];

	public void geldBetragEinlesen(int betrag) {
		this.betrag = betrag;
	}

	public void geldBetragBerechnen() {
		anzahl = new int[werte.length];
		int rest = betrag;
		for (int i = 0; i < werte.length; i++) {
			anzahl[i] = rest / werte[i];
			rest = rest % werte[i];
		}
	}

	public void geldBetragAusgeben() {
		System.out.println("Der Betrag vom Betrag " + betrag + "  wird ausgezahlt in:");
		for (int i = 0; i < werte.length; i++) {
			if (anzahl[i] != 0) {
				System.out.println(anzahl[i] + " mal " + werte[i]);
			}
		}
	}

	public static void main(String[] args) {
		Geldbetrag geldbetrag = new Geldbetrag();
		geldbetrag.geldBetragEinlesen(69);
		geldbetrag.geldBetragBerechnen();
		geldbetrag.geldBetragAusgeben();
	}
}
```
der vorteil ist, man kann das jetzt ganze einfach nach oben bis € 500 oder nach unten bis zu den cent erweitern, man muss nur das obige array anpassen.


----------



## Eldorado (31. Okt 2010)

Funktioniert das nicht nach den Änderungen?



Eldorado hat gesagt.:


> Ach, ich hab aber auch auf dem Schlauch gestanden. Die Zeile musstest du einfach nur rumdrehen und dann halt überall rest benutzen.
> 
> ```
> rest = betrag;
> ...


----------



## bandy (31. Okt 2010)

deni100 hat gesagt.:


> Die Ausgabe ist
> 
> Der Betrag vom Betrag  wird ausgezahlt in:
> Zehn Euro Scheine 2
> ...



An deiner Stelle wuerde ich erst ueberlegen wie du die Betraege ueberhaupt ausgeben willst.

z.B. betrag=50


```
betrag=50;
```

Jetzt kannst es in 50Euro-Schein ausgeben, oder  25x 2Euro-Muenzen, oder 50x 1Euro-Muenzen etc. 
es gibt zig Moeglichkeiten....


----------



## Eldorado (31. Okt 2010)

Es geht ja denke ich um die Ausgabe in Möglichst großen "Scheinen".


----------



## ARadauer (31. Okt 2010)

> An deiner Stelle wuerde ich erst ueberlegen wie du die Betraege ueberhaupt ausgeben willst.


nö, das ist eine standard unbungsaufgabe, bekommt jeder zweite student mal auf. wie im supermarkt... die kassiererin solls möglichst groß raus geben...


----------



## deni100 (31. Okt 2010)

Eldorado hat gesagt.:


> Funktioniert das nicht nach den Änderungen?




Genau so hat es dann gefunzt . Danke für die Antwort und danke auch für die anderen Antworten. Das Forum ist einfach nur klasse .


----------



## bandy (31. Okt 2010)

ARadauer hat gesagt.:


> generell, wenn man irgendwie code verdopplung drinen hat, was ja hier der fall ist, sollte man immer schaun ob man das nicht irgendwie vereinfachen kann. besonders bei solchen dingen mit zahlen, kann man sich super mit arrays helfen
> 
> 
> hier ein beispiel:
> ...



Natuerlich ist es so nicht schlecht wie du es machst, du musst aber hierbei auch das Niveau des Programmierers beruecksichtigen, meiner Meinung nach, ist deine Loesung fuer ihn zu schwer, er muss selber verstehen was er dort bastelt und deswegen habe versucht das ganze nachvollziehbarer zu machen.


----------



## ARadauer (31. Okt 2010)

> er muss selber verstehen was er dort bastelt


ja stimmt, ich bin auch nicht dafür hier hausübungen zu machen. ich denke aber er hat mit diesem code


```
betrag= rest;
    anzahlZehnEuro= betrag/10;
    rest=rest % 10;
    anzahlFuenfEuro=betrag/5;
    rest=rest %5;
    anzahlZweiEuro=betrag%2;
    rest=rest %2;
    anzahlEinEuro = rest;
```
die aufgabe zu... ok sorry jetzt seh ichs. er rechnet mit dem falschen wert weiter. ich dacht er hat die aufgabe schon fast und hat sich nur am anfang den rest mit betrag mit 0 überschrieben.. 
du wolltest ihn noch auf den fehler hinführen, das er immer mit dem anfangswert weiterrechnet anstatt mit dem rest..



> meiner Meinung nach, ist deine Loesung fuer ihn zu schwer


naja arrays sind jetzt nicht so die wahnsinns herausforderung, anfang november.. da hat man schon 3-4 Vorlesungen gehabt..


----------



## deni100 (31. Okt 2010)

Ich mache gerade Fachabi , also hab noch keine Uni besucht. Erst in 2 Jahrewn hoffentlich


----------

