# Hilfe bei Programmierung einer Geldwechselmaschine



## schwertmeister (27. Jun 2015)

Hallo liebe Forenmitglieder,

ich bin lebensälterer Student (30 J.) im ersten Semester Wirtschaftsinfo und soll einen Geldwechselautomaten programmieren

vorab hierzu ...ich bin blutjunger anfänger und sitze seit drei wochen jeden tag mehrere stunden am problem...:rtfm::rtfm:ich bin endgültig am ende mit meinem latein und hoffe jemand kann mir weiterhelfen...wenns geht bitte so dass ich es auch nachvollziehen kann:

*Aufgabe 1 : Klasse Geldwechselautomat*

 Entwerfen Sie eine Klasse, die einen Geldwechselautomaten darstellt.  Dieser soll beliebige Geldbeträge so auf verschiedene Münzen aufteilen,  dass die *Gesamtzahl der Münzen möglichst klein* ist.
 Beispiel für einen Programmlauf (Benutzereingaben sind farblich hervorgehoben): 

Eingabe: *7,46 €*

Ausgabe:
 3 Muenze/n zu 2,00 € 
 1 Muenze/n zu 1,00 € 
 0 Muenze/n zu 50 Cent 
 2 Muenze/n zu 20 Cent 
 0 Muenze/n zu 10 Cent 
 1 Muenze/n zu 5 Cent 
 0 Muenze/n zu 2 Cent 
 1 Muenze/n zu 1 Cent 

Weiter?(j/n) *j*

Die acht *Münzwerte* (2€, 1€, 50cent, 20cent, 10cent, 5cent, 2cent, 1cent) sind in einem *Array *der Klasse Geldwechselautomat abzuspeichern.

Definieren Sie für die Klasse Geldwechselautomat folgende *Methoden*:


*Berechnung *des einzuwechselnden Betrages in Münzwerte in der Methode *umrechnung()* 
 

*Einlesen *der Geldbeträge in der Methode *einlesen()*.  Achten Sie darauf, dass Geldbeträge sowohl in Euro (z.B. 7,46 €) als  auch nur in Cent (z.B. 746 cent) eingegeben werden können. 
 

*Ausgabe *der Münzbeträge in der Methode *ausgabe()* mit den Angaben:
Ausgabe des zu wechselnden Betrages 
Anzahl der Münzen und Münzwerte 
 
Achten Sie darauf, für *Geldbeträge 2 Nachkommastellen* anzuzeigen. 
Versuchen Sie, den Betrag so zu wechseln, dass von jedem der acht Münzen etwas dabei ist.. 
 

Sie können *weitere Methoden* definieren, wenn Sie welche benötigen. 

*Aufgabe 2 : main-Funktionin der Klasse Geldwechselautomat
*

 Entwerfen Sie eine *main*-Funktion  zum Starten des Geldwechselautomaten. Es wird ein Objekt der Klasse  Geldwechselautomaten erzeugt. Dieses fordert nun den Benutzer auf, einen  Geldbetrag einzugeben, um ihn in Münzen zu wechseln. Der  Geldwechselautomat wechselt solange, bis der Benutzer eine 0 eingibt.
*Hinweise:*


Bitte *keine* *Umlaute*, *kein ß* und keine Zeichen oberhalb *Ascii-Code 128* in Bezeichnern oder Dateinamen verwenden! 
Verwenden Sie *sprechende Variablennamen* , also nicht "i", sondern "idealgewicht". 
Bitte *Attribute* als "private" deklarieren! 



Meine Lösung bislang dazu :

ich habe zwei classen aufgemacht:

einmal diese hier : 



```
import java.util.*;

public class berechneWechselgeld 

{
    
    public static void main(String[] args) 
    {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);
         
        float geldbetrag;
        
        System.out.println("Eingabe in €:");
        geldbetrag= sc.nextFloat();
        
 
        Geldwechsel_automat ga = new Geldwechsel_automat();
        ga.umrechnung(geldbetrag);
        System.out.println(ga);
        
                
    }
}
```

und dann dazu passend diese zweite klasse: 


```
public class Geldwechsel_automat 

{
    private int[] wechselgeld = new int[8];

    public int[] umrechnung(float geldbetraginEuro) 
    {

        int[] wechselgeld = new int[8];
        int iwechselgeld = Math.round(geldbetraginEuro * 100);
        
        
        // Für 2€
        wechselgeld[0] = iwechselgeld / 200;
        iwechselgeld = iwechselgeld % 200;

        // Für 1€
        wechselgeld[1] = iwechselgeld / 100;
        iwechselgeld = iwechselgeld % 100;

        // Für 0,50€
        wechselgeld[2] = iwechselgeld / 50;
        iwechselgeld = iwechselgeld % 50;

        // Für 0,20€
        wechselgeld[3] = iwechselgeld / 20;
        iwechselgeld = iwechselgeld % 20;

        // Für 0,10€
        wechselgeld[4] = iwechselgeld / 10;
        iwechselgeld = iwechselgeld % 10;

        // Für 0,05€
        wechselgeld[5] = iwechselgeld / 5;
        iwechselgeld = iwechselgeld % 5;

        // Für 0,02€
        wechselgeld[6] = iwechselgeld / 2;
        iwechselgeld = iwechselgeld % 2;

        // Für 0,01€
        wechselgeld[7] = iwechselgeld / 1;
        iwechselgeld = iwechselgeld % 1;

        this.wechselgeld = wechselgeld;
        return wechselgeld;

    }

    public String toString() 
    
    {
        {        
                    
            String ausgabe = "Ausgabe: ";
            for (int eingabe = 0; eingabe < wechselgeld.length; eingabe++) 
            {

                switch (eingabe) 
                {
                case 0:
                    ausgabe += "\n Muenze/n zu 2,00 €:";
                    break;
                case 1:
                    ausgabe += "\n Muenze/n zu 1,00 €:";
                    break;
                case 2:
                    ausgabe += "\n Muenze/n zu 0,50 Euro:";
                    break;
                case 3:
                    ausgabe += "\n Muenze/n zu 0,20 Euro:";
                    break;
                case 4:
                    ausgabe += "\n Muenze/n zu 0,10 Euro:";
                    break;
                case 5:
                    ausgabe += "\n Muenze/n zu 0,05 Euro:";
                    break;
                case 6:
                    ausgabe += "\n Muenze/n zu 0,02 Euro:";
                    break;
                case 7:
                    ausgabe += "\n Muenze/n zu 0,01 Euro:";
                    break;

                default:
                    ausgabe += "\n Fehler ";
                    break;
                }

                ausgabe += wechselgeld[eingabe];
                ausgabe += " ";
            }

            return ausgabe;

        }
    }    
}
```


was das programm bisher kann? ich kann den float 7,46 eingeben und die ausgabe ist wie oben in der aufgabenstellung gefordert...

was mir fehlt? 

1.wie sage ich meinem code das er bei 7,46 es als euro betrachtet und 746 umrechnet in 7,46 euro??

2. passend dazu...wie verarzte ich das problem, dass ich das symbol € oder aber das wort cent hinter den betrag schreibe...und der jenachdem was getippt wird, richtig entscheidet...denke da an if-else...weiß aber nicht wie und wo genau ich es heir einfügen soll

3. wie packe ich das ganze so, dass er dolange geld wechselt bis ich die "0 €" bzw. "0 Cent" eingebe und er dann ausgibt "Ohne Geldeinwurf kein weiteres wechseln mehr möglich...

4. also schmankerl noch dazu ...wie bekomme ich alles als conolenausgabe?


???:L:bahnhof:???:L


----------



## Henne079 (27. Jun 2015)

Hallo,

zu deinen Problemen.

1. Du kannst deinen _int_ Wert als _float_ speichern. Dann einfach den Wert durch 100 teilen und speichern.

2. Ich bin mir unsicher wie du das meinst. Vielleicht kannst du es nochmal genauer beschreiben.

3. Soll das Programm um die Funktion erweitert werden, dass man angibt welche Münzen eingeworfen wurden und er das alles zusammen rechnet und danach mit so wenig Münzen wie möglich zurück gibt?

4. Wenn du die Konsole nutzt um Ein-/Ausgaben darzustellen, dann kannst du mit "_System.out.println("<text>");</text>_" eine Zeile schreiben lassen.


----------



## InfectedBytes (27. Jun 2015)

1. einfach mit 100 multiplizieren bzw. dividieren
2. Du könntest die Eingabe als String einlesen und mit charAt das letzte Zeichen betrachten. Falls dieses ein Euro Zeichen ist ist die Eingabe eben in Euro, ansonsten in Cent. Bevor du den String dann in eine Zahl umwandeln kannst, musst du natürlich noch das Euro Zeichen abschneiden. Z.b. mit substring oder replace
3. du nutzt eine Schleife und prüfst ob die Eingabe 0 ist
4. was meinst du damit? Auf die Konsole kannst du z.b. mit System.out.println() ausgeben, wie du es bereits getan hast

edit: zu langsam^^


----------



## schwertmeister (27. Jun 2015)

Danke für die ersten Rückläufer...mein problem ist weniger das wie inhaltlich (semantik) sondern eher das technische how to...(syntax?)

_"1. Du kannst deinen int Wert als float speichern. Dann einfach den Wert durch 100 teilen und speichern."_

...im betreffenden code von mir wo genau müsste ich das tun...wie würde sowas aussehen? (böhmische dörfer...vom syntax her)

_"2. Ich bin mir unsicher wie du das meinst. Vielleicht kannst du es nochmal genauer beschreiben."_
_"2. Du könntest die Eingabe als String einlesen und mit charAt das letzte  Zeichen betrachten. Falls dieses ein Euro Zeichen ist ist die Eingabe  eben in Euro, ansonsten in Cent. Bevor du den String dann in eine Zahl  umwandeln kannst, musst du natürlich noch das Euro Zeichen abschneiden.  Z.b. mit substring oder replace."
_
...auch wieder als syntax die frage...wie und wo genau...man soll eben nicht als bsp. 7,46 sondern eben 7,46 € eingeben und er weiß bescheid und wenn man 746 Cent eingibt weiß er dass es inhaltlich das gleiche ist...also man gibt eine zahlen buchstabenkombi ein...

_3. Soll das Programm um die Funktion erweitert werden, dass man angibt  welche Münzen eingeworfen wurden und er das alles zusammen rechnet und  danach mit so wenig Münzen wie möglich zurück gibt?_

...steht in aufgabe die ich gepostet habe ...die stückelung soll wie bei 7,46 € als bsp. so gleichmäßig wie möglich erfolgen...
...schleife...da dachte ich an eine do...while schleife...aber auch hier wieder syntax...wo in meinem code setze ich die an...und was steht in meiner while bedingung...

_4. Wenn du die Konsole nutzt um Ein-/Ausgaben darzustellen, dann kannst du mit "System.out.println("");" eine Zeile schreiben lassen."_

...mit console meine ich die von Aplu (Aegidius Pluess) Home der arbeiten wir im kurs die ganze zeit...aber 4. ist optional...die punkte gibts auch wenn man mit syso arbeitet...


danke schonmal füer die ersten antworten...ich hoffe ich konnte es jetzt ein wenig präzisieren...

ich beantworte aber auch gerne weitere verständnisfragen...

bin ohne euch aufgeschmissen und finde es toll dass es ein forum wie dieses hier gibt..

...was haltet ihr grundsätzlich von meinen beiden klassen...ist das denn grundsätzlich komplett falsch ??


----------



## InfectedBytes (27. Jun 2015)

sorry, aber wenn du seit drei Wochen an dem Problem hängst und dennoch die syntax dein größtes Problem darstellt, solltest du dir vielleicht mal ein Java Grundlagen Buch gönnen: Rheinwerk Computing :: Java ist auch eine Insel - index

Als kleiner Einstieg mal trotzdem etwas Code um dich in die richtige Richtung zu lenken:

```
private float getWert(String input) {
  if(input.contains("€")) { // Falls das Euro Zeichen vorkommt
    input = input.replace("€", "").trim(); // Zeichen entfernen und leerzeichen entfernen
    return Float.parseFloat(input);
  } else if(input.contains("Cent")) { // Falls das Wort "Cent" vorkommt
    input = input.replace("Cent", "").trim(); // Wort entfernen und leerzeichen entfernen
    return Float.parseFloat(input) / 100f; // Wert anpassen
  } else { // Ansonsten
    System.out.println("Ungültige Eingabe");
    return 0;
  }
}
```


```
Scanner scanner = new Scanner(System.in);
String input;
while( !(input=scanner.nextLine()).equals("exit") ) { //solange die Eingabe nicht "exit" ist
  float wert = getWert(input);
  // umrechnen etc.
}
```


----------



## schwertmeister (28. Jun 2015)

danke für den programcode ich versuche ihn die ganze zeit gerade einzubinden aber es klappt nicht 

du hast ja zwei teile geschrwas genau ist denn der input in der while bedingung und ist es überhaupt ieben...welcher teil deiner zwei codes gehört in welche klasse von mir ?

richtig so wie ich zwei klassen aufzu machen oder sollte man alles in einer abfrühstücken ? 

und sei mir bitte nicht böse wenn ich keine syntaxprobs hätte würde ich hier nicht um hilfe beten...ich bin echt fleißig und zielstrebig und lese gerade sogar drei bücher zu java, gehe in tutorien etc. aber es gibt auch noch andere fächer und in einer woche ist die abgabe dieser mammutaufgabe(so kommt sie mir zum. vor) 

ich bin zum beispiel ziemlich gut in mathe und gebe nachhilfe in mathe...ich erkläre jemandem auch nicht gebrochene zahlen in dem ich ihm beispiele in complexen zahlen vorrechne...du verstehst...ich schreibe hier rein weill ich eben nicht weiß wo genau welcher punkt, komma strich zu setzen ist...also wenn mir jemand helfen möchte bin ich sehr sehr dankbar ...wem das als zu "lästig" erscheint der muss hier ja nicht reinschreiben...danke nochmal


----------



## MWin123 (28. Jun 2015)

schwertmeister hat gesagt.:


> du hast ja zwei teile geschrwas genau ist denn der input in der while bedingung und *ist es überhaupt ieben*...


Was meinst du damit? 


```
Scanner scanner = new Scanner(System.in);
String input;
while( !(input=scanner.nextLine()).equals("exit") ) { //solange die Eingabe nicht "exit" ist
  float wert = getWert(input);
  // umrechnen etc.
}
```
scanner.nextLine() liest einfach die nächste Zeile ein, die du in der Konsole getippt hast.

Siehe auch https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextLine--




schwertmeister hat gesagt.:


> ich schreibe hier rein weill ich eben nicht weiß wo genau welcher punkt, komma strich zu setzen ist...


Daran scheitert es auch nicht. Wenn du eine IDE verwendest wird sofort angezeigt, dass irgendwo eine Klammer oder ein Strichpunkt fehlt.


----------



## schwertmeister (28. Jun 2015)

ich weiß einfach nicht wo ich die beiden codefragmente einbauen soll...nurmal nen einblick darin wie hilflos ich gerade bin...


```
import java.util.*;

public class berechneWechselgeld 

{
    public static void main (String []args)
    {
        Scanner scanner = new Scanner(System.in);
        String geldbetrag;
                
        private float geldbetrag(String geldbetrag1) 
            {
                  if(geldbetrag1.contains("€")) 
                  { // Falls das Euro Zeichen vorkommt
                    geldbetrag1 = geldbetrag1.replace("€", "").trim(); // Zeichen entfernen und leerzeichen entfernen
                    return Float.parseFloat(geldbetrag1);
                  } else if(geldbetrag1.contains("Cent")) 
                  
                  { // Falls das Wort "Cent" vorkommt
                    geldbetrag1 = geldbetrag1.replace("Cent", "").trim(); // Wort entfernen und leerzeichen entfernen
                    return Float.parseFloat(geldbetrag1) / 100f; // Wert anpassen
                  } else 
                  
                  { // Ansonsten
                    System.out.println("Ungültige Eingabe");
                    return 0;
                  }
            }
        
        while( !(geldbetrag1=scanner.nextLine()).equals("exit") )
        {
            float wert = geldbetrag(geldbetrag1);
            
        }
    }
}
[code=Java]

ich sehe nur  noch rot in eclipse und habe vollkommen den durchblick verloren... (mein alter code funzet in sich weigstens...jetzt weiß ich gar nichts mehr...  


also nochmal..an meinem zweiten code...
der private class Geldwechsel_automat änder ich nix... habe ich das richtig  verstanden?
der schlüssel für die lösung meiner probleme liegt in meiner ersten klasse berechneWechselgeld? (Code sie meinen eingangspost)
habe ich das richtig verstanden ...?

was ich nicht verstanden habe...wie ich den code

[Java]
[LIST=1]
[*].p[COLOR=#000000][B]rivate[/B][/COLOR] [COLOR=#000066][B]float[/B][/COLOR] getWert[COLOR=#009900]([/COLOR][URL="http://www.java-forum.org/redirect-to/?redirect=http%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl%23q%3Dallinurl%253Adocs.oracle.com%2Bjavase%2Bdocs%2Bapi%2Bstring%26btnI%3DI%2527m%2520Feeling%2520Lucky"][COLOR=#003399]String[/COLOR][/URL] input[COLOR=#009900])[/COLOR] [COLOR=#009900]{
[/COLOR] 
[*]  [COLOR=#000000][B]if[/B][/COLOR][COLOR=#009900]([/COLOR]input.[COLOR=#006633]contains[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"€"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#666666][I]// Falls das Euro Zeichen vorkommt[/I][/COLOR] 
[*]    input [COLOR=#339933]=[/COLOR] input.[COLOR=#006633]replace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"€"[/COLOR], [COLOR=#0000ff]""[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]trim[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// Zeichen entfernen und leerzeichen entfernen[/I][/COLOR] 
[*]    [COLOR=#000000][B]return[/B][/COLOR] [URL="http://www.java-forum.org/redirect-to/?redirect=http%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl%23q%3Dallinurl%253Adocs.oracle.com%2Bjavase%2Bdocs%2Bapi%2Bfloat%26btnI%3DI%2527m%2520Feeling%2520Lucky"][COLOR=#003399]Float[/COLOR][/URL].[COLOR=#006633]parseFloat[/COLOR][COLOR=#009900]([/COLOR]input[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[*]  [COLOR=#009900]}[/COLOR] [COLOR=#000000][B]else[/B][/COLOR] [COLOR=#000000][B]if[/B][/COLOR][COLOR=#009900]([/COLOR]input.[COLOR=#006633]contains[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"Cent"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#666666][I]// Falls das Wort "Cent" vorkommt[/I][/COLOR] 
[*]    input [COLOR=#339933]=[/COLOR] input.[COLOR=#006633]replace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"Cent"[/COLOR], [COLOR=#0000ff]""[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]trim[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// Wort entfernen und leerzeichen entfernen[/I][/COLOR] 
[*]    [COLOR=#000000][B]return[/B][/COLOR] [URL="http://www.java-forum.org/redirect-to/?redirect=http%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl%23q%3Dallinurl%253Adocs.oracle.com%2Bjavase%2Bdocs%2Bapi%2Bfloat%26btnI%3DI%2527m%2520Feeling%2520Lucky"][COLOR=#003399]Float[/COLOR][/URL].[COLOR=#006633]parseFloat[/COLOR][COLOR=#009900]([/COLOR]input[COLOR=#009900])[/COLOR] [COLOR=#339933]/[/COLOR] 100f[COLOR=#339933];[/COLOR] [COLOR=#666666][I]// Wert anpassen[/I][/COLOR] 
[*]  [COLOR=#009900]}[/COLOR] [COLOR=#000000][B]else[/B][/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#666666][I]// Ansonsten[/I][/COLOR] 
[*]    [URL="http://www.java-forum.org/redirect-to/?redirect=http%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl%23q%3Dallinurl%253Adocs.oracle.com%2Bjavase%2Bdocs%2Bapi%2Bsystem%26btnI%3DI%2527m%2520Feeling%2520Lucky"][COLOR=#003399]System[/COLOR][/URL].[COLOR=#006633]out[/COLOR].[COLOR=#006633]println[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"Ungültige Eingabe"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[*]    [COLOR=#000000][B]return[/B][/COLOR] [COLOR=#cc66cc]0[/COLOR][COLOR=#339933];[/COLOR] 
[*]  [COLOR=#009900]}[/COLOR] 
[*][COLOR=#009900]}
  [/COLOR] 
[/LIST]
[code=Java]

in meinen von oben (siehe eingangspost) einbinden soll?

und wohin dann bitte mit

 [code=Java]

[LIST=1]
[*]Scanner scanner [COLOR=#339933]=[/COLOR] [COLOR=#000000][B]new[/B][/COLOR] Scanner[COLOR=#009900]([/COLOR][URL="http://www.java-forum.org/redirect-to/?redirect=http%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl%23q%3Dallinurl%253Adocs.oracle.com%2Bjavase%2Bdocs%2Bapi%2Bsystem%26btnI%3DI%2527m%2520Feeling%2520Lucky"][COLOR=#003399]System[/COLOR][/URL].[COLOR=#006633]in[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[*][URL="http://www.java-forum.org/redirect-to/?redirect=http%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl%23q%3Dallinurl%253Adocs.oracle.com%2Bjavase%2Bdocs%2Bapi%2Bstring%26btnI%3DI%2527m%2520Feeling%2520Lucky"][COLOR=#003399]String[/COLOR][/URL] input[COLOR=#339933];[/COLOR] 
[*][COLOR=#000000][B]while[/B][/COLOR][COLOR=#009900]([/COLOR] [COLOR=#339933]![/COLOR][COLOR=#009900]([/COLOR]input[COLOR=#339933]=[/COLOR]scanner.[COLOR=#006633]nextLine[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]equals[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"exit"[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#666666][I]//solange die Eingabe nicht "exit" ist[/I][/COLOR] 
[*]  [COLOR=#000066][B]float[/B][/COLOR] wert [COLOR=#339933]=[/COLOR] getWert[COLOR=#009900]([/COLOR]input[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[*]  [COLOR=#666666][I]// umrechnen etc.[/I][/COLOR] 
[*][COLOR=#009900]}[/COLOR] 
[/LIST]

[code=Java]

Ich weiß dass das für nen Java nerd wie erste klasse vorkommen mag ...aber es ist meine erste berührung mit programmieren überhaupt...desshalb schreibe ich hier ja rein...ich werde auch die semesterferien weiter arbeiten daran...aber die abgabe dieser aufgabe ist in einer woche...;(
```


----------



## schwertmeister (28. Jun 2015)

ok schritt für schritt...erstmal das problem 1...also die unterscheidung 7,46 € gleich 746 Cent ...

was ich jetzt gemacht habe


```
import java.util.*;

public class berechneWechselgeld

{

    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        String geldbetrag;

        System.out.println("Eingabe in €:");
        while (!(geldbetrag = Scanner.nextLine()).equals(0)) 
        { // solange die Eingabe nicht 0 ist
            float wert = umrechnung(geldbetrag);

            Geldwechsel_automat ga = new Geldwechsel_automat();
            ga.umrechnung(geldbetrag);
            System.out.println(ga);

        }
    }

    private static float umrechnung(String geldbetrag) 
    {
        if(geldbetrag.contains("€")) { // Falls das Euro Zeichen vorkommt
            geldbetrag = geldbetrag.replace("€", "").trim(); // Zeichen entfernen und leerzeichen entfernen
            return Float.parseFloat(geldbetrag);
          } else if(geldbetrag.contains("Cent")) { // Falls das Wort "Cent" vorkommt
            geldbetrag = geldbetrag.replace("Cent", "").trim(); // Wort entfernen und leerzeichen entfernen
            return Float.parseFloat(geldbetrag) / 100f; // Wert anpassen
          } else { // Ansonsten
            System.out.println("Ungültige Eingabe");
            return 0;
    }
}
```

sowie


```
public class Geldwechsel_automat 

{
    private int[] wechselgeld = new int[8];                
    
    public int[] umrechnung(float geldbetrag) 
    {
 
        int[] wechselgeld = new int[8];
        int iwechselgeld = Math.round(geldbetrag * 100);
 
 
        // Für 2€
        wechselgeld[0] = iwechselgeld / 200;
        iwechselgeld = iwechselgeld % 200;
 
        // Für 1€
        wechselgeld[1] = iwechselgeld / 100;
        iwechselgeld = iwechselgeld % 100;
 
        // Für 0,50€
        wechselgeld[2] = iwechselgeld / 50;
        iwechselgeld = iwechselgeld % 50;
 
        // Für 0,20€
        wechselgeld[3] = iwechselgeld / 20;
        iwechselgeld = iwechselgeld % 20;
 
        // Für 0,10€
        wechselgeld[4] = iwechselgeld / 10;
        iwechselgeld = iwechselgeld % 10;
 
        // Für 0,05€
        wechselgeld[5] = iwechselgeld / 5;
        iwechselgeld = iwechselgeld % 5;
 
        // Für 0,02€
        wechselgeld[6] = iwechselgeld / 2;
        iwechselgeld = iwechselgeld % 2;
 
        // Für 0,01€
        wechselgeld[7] = iwechselgeld / 1;
        iwechselgeld = iwechselgeld % 1;
 
        this.wechselgeld = wechselgeld;
        return wechselgeld;
 
    }
 
    public String toString() 
 
    {
        {        
 
            String ausgabe = "Ausgabe: ";
            for (int eingabe = 0; eingabe < wechselgeld.length; eingabe++) 
            {
 
                switch (eingabe) 
                {
                case 0:
                    ausgabe += "\n Muenze/n zu 2,00 €:";
                    break;
                case 1:
                    ausgabe += "\n Muenze/n zu 1,00 €:";
                    break;
                case 2:
                    ausgabe += "\n Muenze/n zu 0,50 Euro:";
                    break;
                case 3:
                    ausgabe += "\n Muenze/n zu 0,20 Euro:";
                    break;
                case 4:
                    ausgabe += "\n Muenze/n zu 0,10 Euro:";
                    break;
                case 5:
                    ausgabe += "\n Muenze/n zu 0,05 Euro:";
                    break;
                case 6:
                    ausgabe += "\n Muenze/n zu 0,02 Euro:";
                    break;
                case 7:
                    ausgabe += "\n Muenze/n zu 0,01 Euro:";
                    break;
 
                default:
                    ausgabe += "\n Fehler ";
                    break;
                }
 
                ausgabe += wechselgeld[eingabe];
                ausgabe += " ";
            }
 
            return ausgabe;
 
        }
    }    
}
```
...

ich komme nicht mehr weiter ;shock:


----------



## schwertmeister (29. Jun 2015)

Guten morgen liebe Forenmitglieder ich bin (hoffentlich) kurz vor meinem Ziel...habe auch gestern den ganzen Tag fleißig herumgetestet...gestern abend gab mir mein Tutor auch nochmal meinen Code mit Kommentaren versehen zurück...er darf mir nicht mehr sagen, weil er mich auch bewertet, aber ich muss gestehen, ich habe sogar bis ein uhr nachts dran gesessen und irgendwie will der funke noch nicht rüberspringen...habt ihr noch den entscheidenen hinweiß oder die entscheidene letzte fehlende zeile? oder sehe ich den wald vor lauter bäumen nicht ?? 

ach so und er schrieb mir in seiner mail ich sei kurz vor der lösung ich solle nicht aufgeben...aber ich bin ehlich gesagt kurz davor mein thinkpad an die wand zu schleudern ???:L

hier mal seine kommentierte fassung:


```
import java.util.Scanner;

public class berechneWechselgeld

{

    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        /**
         * Deine Abbruchkriterien sind falsch, eine Eingabe ohne Zeichen ist
         * nicht zugelassen, eine EIngabe mit ',' liefert auch Fehler. cent wird
         * nicht erkannt, man MUSS Cent schreiben und in jedem Fall wird eine
         * Endlosschleife produziert
         */
        String geldbetrag;
                                                                // Warum nicht gleich geldbetrag was zuweisen?
        geldbetrag = sc.nextLine();

        System.out.println("Eingabe in €:");
                                                                // while (!(geldbetrag = Scanner.nextLine()).equals(0))
                                                                // erst Initialisieren, dann klappt das auch mit Vergleichen
                                                                // und wenn du etwas in einem String suchst, dann entweder " " oder
                                                                // einzelnen Buchstabe ' '
        while (!(geldbetrag.equals("0"))) {                     // solange die Eingabe nicht 0 ist
            float wert = umrechnung(geldbetrag);

            Geldwechsel_automat ga = new Geldwechsel_automat();
                                                                // ga.umrechnung(geldbetrag); //-> Der Fehler sagt: du hast für
                                                                // deine Methode den Falschen Datentyp genommen
                                                                // ga.umrechnung(FLOAT!!!!)
            ga.umrechnung(wert);
            System.out.println(ga);

        }
    }

    private static float umrechnung(String geldbetrag) {
        if (geldbetrag.contains("€")) {                         // Falls das Euro Zeichen vorkommt
            geldbetrag = geldbetrag.replace("€", "").trim();     // Zeichen
                                                                // entfernen und
                                                                // leerzeichen
                                                                // entfernen
            return Float.parseFloat(geldbetrag);
        } else if (geldbetrag.contains("Cent")) {                 // Falls das Wort "Cent"
                                                                // vorkommt
            geldbetrag = geldbetrag.replace("Cent", "").trim(); // Wort entfernen und leerzeichen entfernen
            return Float.parseFloat(geldbetrag) / 100f;         // Wert anpassen
        } else {                                                 // Ansonsten
            System.out.println("Ungültige Eingabe");
            return 0;
        }
    }
}
```

ich danke nachwievor jedem der mir weiterhilft...noch vier tage bis abgabe...(vor zwei tagen funktionierte mein code noch was zahlen anging...jetzt wo ich das problem euro cent ...string und int in float angehe funzt nischt mehr ;()


----------



## Saheeda (29. Jun 2015)

Hallo,

wo hast du denn noch Probleme? Bist du seit heute Mittag irgendwie weiter gekommen?
In deinem letzten Beitrag sind einige Kommentare, die einfach nur beschreiben, was der Code macht, und einige, die nach Anmerkung aussehen. Es ist nicht ganz so leicht durchzusehen, was von dir oder von deinem Tutor kommt.


----------



## Saheeda (29. Jun 2015)

So, ich hab mich mal dran versucht:


```
package geldautomat;

import java.util.Scanner;

public class berechneWechselgeld

{

	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);

		boolean run = true;
		// !geldbetrag.equals("0") hat dir eine Endlosschleife produziert.
		// Indem ich stattdessen mit einem boolean arbeite, kann ich besser
		// steuern, wann das Programm abgebrochen wird:
		while (run) {
			System.out.println("Bitte einen Betrag eingeben (Euro als €): ");
			String geldbetrag = sc.nextLine();

			if (geldbetrag.equals("0")) {
				System.out.println("Das Programm wurde beendet.");
				run = false;
			} else {
				float wert = umrechnung(geldbetrag);
				Geldwechsel_automat ga = new Geldwechsel_automat();
				ga.umrechnung(wert);
				System.out.println(ga + "\n");
			}
		}
	}

	private static float umrechnung(String geldbetrag) {

		//ersetzt alle "," durch "." --> beim Parsen in Float fliegt keine Exception mehr.
		if (geldbetrag.contains(",")) {
			geldbetrag = geldbetrag.replaceAll(",", ".");
		}

		if (geldbetrag.contains("€")) {
			geldbetrag = geldbetrag.replace("€", "").trim();
			return Float.parseFloat(geldbetrag);

			//Abfrage nach kleingeschriebenem cent
		} else if (geldbetrag.contains("Cent") || geldbetrag.contains("cent")) {
			geldbetrag = geldbetrag.replace("Cent", "").replace("cent", "")
					.trim();
			return Float.parseFloat(geldbetrag) / 100f;

		} else {
			System.out.println("Ungültige Eingabe");
			return 0;
		}
	}
}
```

Es geht definitiv schöner, aber so sollte es erstmal funktionieren.

P.S.: In der Geldwechsel_automat - klasse steht in der Ausgabe manchmal "Euro", manchmal "€".


----------



## schwertmeister (29. Jun 2015)

Danke dir für deine mühe...

ich habs nach endlosen stunden und kaffeebechern und einigen sehr sehr guten hinweisen hier lauffähig bekommen...

schaut mal rüber und lasst es mal mit ein paar euro und centeingaben durchlaufen...

sind noch schönheitsfehler drin...

1. er gibt den wert der größten auszugebenden münze nochmal vorher als zahl seperat aus...keine ahnung wieso

2. er gibt bei 0 zwar nen tschüß text aus ...aber er stellt nicht nach  eingabe die frage weiter j/n? wie in aufgabenstellung gefordert...wie  baue ich die ein und wo?

3. wie baue ich es ein dass er auch bei fehleingaben einen nicht  rauswirft man sondern drinnen bleibt im algorithmus und er einen zur  erneuten eingabe auffordert...momentan gibt es bei fehleingabe ...also  falsches symbol wort oder nur zahl einfach nur ne fehlermeldung


```
import java.util.Scanner;

public class Geldwechselautomat {

    private int[] muenzenwerte = new int[8];

    public static void main(String[] args)

    {
        Geldwechselautomat auto = new Geldwechselautomat();
        String wert = auto.einlesen();

    }

    private void umrechnung(int wert)

    {

        int[] wechselgeld = new int[8];

        // Für 2€
        System.out.println(wert / 200);
        wechselgeld[0] = wert / 200;
        wert = wert % 200;

        // Für 1€
        wechselgeld[1] = wert / 100;
        wert = wert % 100;

        // Für 0,50€
        wechselgeld[2] = wert / 50;
        wert = wert % 50;

        // Für 0,20€
        wechselgeld[3] = wert / 20;
        wert = wert % 20;

        // Für 0,10€
        wechselgeld[4] = wert / 10;
        wert = wert % 10;

        // Für 0,05€
        wechselgeld[5] = wert / 5;
        wert = wert % 5;

        // Für 0,02€
        wechselgeld[6] = wert / 2;
        wert = wert % 2;

        // Für 0,01€
        wechselgeld[7] = wert / 1;
        wert = wert % 1;

        this.muenzenwerte = wechselgeld;

    }

    private String einlesen()

    {
        Scanner scanner = new Scanner(System.in);
        boolean weiter = true;
        String gescannt = null;
        while (weiter) {
            System.out.println("Eingabe: \nAbbruch bei 0 € oder 0 Cent");
            gescannt = scanner.nextLine();
            System.out.println(gescannt);

            if (gescannt.equals("0")) 
            
            {
                System.out.println("Ohne Geldeinwurf kein weiteres wechseln mehr möglich...");
                weiter = false;
            }
            
            int wert = getWert(gescannt);
            System.out.println("Berechnung startet...");
            umrechnung(wert);
            ausgabe();
        }

        scanner.close();

        return gescannt;
    }

    private void ausgabe() {
        String[] tmp = { " Muenze/n zu 2,00 €:", " Muenze/n zu 1,00 €:", " Muenze/n zu 0,50 Euro:",
                " Muenze/n zu 0,20 Euro:", " Muenze/n zu 0,10 Euro:", " Muenze/n zu 0,05 Euro:",
                " Muenze/n zu 0,02 Euro:", " Muenze/n zu 0,01 Euro:" };
        for (int i = 0; i < muenzenwerte.length; i++) {
            System.out.println(muenzenwerte[i] + tmp[i]);
        }

    }

    private int getWert(String wert)

    {
        int eingabe = 0;
        String[] a = wert.split(" ");
        if (a[1].equals("Cent")) {
            eingabe = Integer.parseInt(a[0]);
        } else {
            wert = wert.replace(",", "");
            wert = wert.replace("€", "");
            wert = wert.replace(" ", "");
            System.out.println(wert);
            eingabe = Integer.parseInt(wert);
        }
        return eingabe;
    }
}
```


----------



## Saheeda (29. Jun 2015)

zu 1: Zeile 22

zu 2:
Unter this.ausgabe, z.B.

```
while (weiter) {
			System.out.println("Eingabe: \nAbbruch bei 0 € oder 0 Cent");
			gescannt = scanner.nextLine();
			System.out.println(gescannt);

			if (gescannt.equals("0"))

			{
				System.out
				.println("Ohne Geldeinwurf kein weiteres wechseln mehr möglich...");
				weiter = false;
			}

			int wert = this.getWert(gescannt);
			System.out.println("Berechnung startet...");
			this.umrechnung(wert);
			this.ausgabe();
			System.out.println("Möchten Sie weiter machen? ");
			String antwort = scanner.nextLine();
			if (antwort.equalsIgnoreCase("n")) {
				weiter = false;
			}
		}
```

zu 3:
Es gibt den Befehl try-catch. Such mal danach. 



In "getWert" würde ich nicht .equals, sondern .equalsIgnoreCase benutzen, sonst hast du wieder das Problem, dass "Cent" funktioniert, aber "cent" nicht.


----------



## schwertmeister (29. Jun 2015)

thanks...

1. wie schaffe ich es nun , dass er weder bei euro noch centangaben rausschmeißt wenn ich das lehrzeichen nach der zahl vergesse ?

2. er scheint nach eingabe den selben wert als centberag nochmal reinzuschreiben bevor er "Berechnung startet..."


----------



## schwertmeister (29. Jun 2015)

hab mal auf die schnelle http://schnabby.de/try-catch-java/ gefunden...heißt das ich haue mein try catch um den gesamten code und ganz übergeordent ?

und als catch haue ich sämtliche fehlermeldungen rein ? ?


----------



## Saheeda (30. Jun 2015)

zu 1:
Entweder über geldbetrag.contains() so wie weiter oben. Du könntest bei String[] a = wert.split(" "); schauen, wie groß a ist. Wenn es die Länge 2 hat, wurde höchstwahrscheinlich zwischen Betrag und Währung ein Leerzeichen gelassen, andernfalls nicht. Je nachdem, benutzt du dann die .contains()-Methode oder das, was jetzt schon in getWert() steht.

Oder du gibst dem User eiskalt eine Fehlermeldung zurück, weil die Eingabe nicht das erwartete Format hat.

zu 2:
Gehe alle deine System.out.... durch und schau, welches das ist. In den meisten Programmen kannst du auch über Strg + F eine Suchmaske öffnen.

zu 3:
Du machst ein try-catch um den Aufruf, bei dem ein Fehler fliegen kann, z.B. um den Aufruf von getWert(). Generell sollte man damit aber sparsam umgehen und es nur benutzen, wenn Fehler anders nicht vermieden werden können. Und dann werden auch nicht alle Fehler "gecatched", sondern nur die, mit denen du rechnest, z.B. NumberFormatExceptions, die durch Parser-Fehler entstehen. Alle unerwarteten Fehler sollen und dürfen dir um die Ohren fliegen.

Als Anfänger neigt man nämlich sonst dazu, einfach sämtliche Fehlerfälle zu "catchen", was das Programm unglaublich schwer zu debuggen macht. Fehlermeldungen sind ja nicht automatisch schlecht, sondern weisen dich nur darauf hin, wo irgendetwas nicht so funktioniert, wie es sollte.


----------



## schwertmeister (30. Jun 2015)

ich schaus mir morgen weiter an...danke dir für die ausdauer

p.s dein postfach ist voll wollte dir ne pn schicken geht aber nicht weil zugestaubt

gn8


----------

