# Münzautomat



## MendozZza (3. Dez 2010)

hey, hab hier ne schöne, Aufgabe komme aber selbst leider nicht drauf. Bin blutige Anfängerin.
Wir sollen einen Münzautomaten programmieren in Java mit JCreator.
Die Aufgabe lautet:
1. Der zu zahlende Fahrpreis ist ein float-Wert (die kleinste Einheit ist 5 Cent,
kleinere Centbeträge kommen nicht vor).
2. Der zu zahlende Fahrpreis ist immer kleiner oder gleich 5 Euro und größer als
0 Euro.
3. Es können nicht mehr als 5 Euro als Geldbetrag eingeworfen werden. Der
eingeworfene Geldbetrag ist als float-Wert zu erfassen (zwei Nachkommastellen).
4. Der Automat verfügt über folgende Münzarten: 2 Euro, 1 Euro, 50 Cent, 20,
Cent, 10 Cent, 5 Cent.
5. Auszugeben ist die Anzahl der jeweiligen Münzart, die als Wechselgeld zurückgegeben
wird.
6. Der eingeworfene Geldbetrag ist größer oder gleich dem zu zahlenden Fahrpreis.
Beispiel:
Eingabe:
zu zahlender Fahrpreis: 2,10 Euro
eingeworfener Geldbetrag: 5,00 Euro
Ausgabe:
1 * 2 Euro, 1 * 50 Cent, 2 * 20 Cent
Entwerfen Sie eine Java-Klasse Muenzautomat, die das voran stehende
Problem löst. Diese soll eine Methode public int[] berechneWechselgeld(float
preis, float geldbetrag) enthalten. In dieser Methode soll das Wechselgeld berechnet
werden. Als Ergebnis wird ein Feld zurückgegeben, dass für jede Münzart
die Anzahl der Münzen im Wechselgeld angibt.


```
public class Muenzautomat

{


	double muenz[][]=new double[2][8];
	int anzahl_muenzen[]=new int[8];
	float zuZahlen;
	float Preis;
	double rueckGeldBetrag;
	int Exeption;

	public float zuZahlen()
		
	{
		this.zuZahlen=zuZahlen;
	}
	
	public float Preis()
		
	{
		this.Preis=Preis;
	}
	
	
	 public void init()
  {
     muenz[0][0]=2;
     muenz[0][1]=1;
     muenz[0][2]=0.5;
     muenz[0][3]=0.2;
     muenz[0][4]=0.1;
     muenz[0][5]=0.05;
     muenz[0][6]=0.02;
     muenz[0][7]=0.01;
     for(int i=0;i<=7;i++)
     {
       muenz[1][i]=5;
     }
  }

  // Anfang Methoden

  public void neuberechnen()
  {
    for(int i=0;i<=7;i++)
    {
      muenz[1][i]=muenz[1][i]-anzahl_muenzen[i];
      anzahl_muenzen[i]=0;
    }
  }

	// Prüfung

	public boolean pruefung(int i)
 	{
    if((muenz[0][i]==2.0)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==1.0)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==0.5)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==0.2)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==0.1)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==0.05)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==0.02)&&(muenz[1][i]<=5))
    return true;
    if((muenz[0][i]==0.01)&&(muenz[1][i]<=5))

	// Prüfung 2

    int i=0, gesamt=0;
    do
    {
      if(betrag>=muenz[0][i])
      {
        anzahl_muenzen[i]=(int)(betrag/muenz[0][i]);
        betrag=betrag%muenz[0][i];
        betrag=(java.lang.Math.round(betrag*100)/100.);
      }
      gesamt=gesamt+anzahl_muenzen[i];
      i++;
      if(i>7) break;
    }while(betrag>0);
    if(gesamt==1)
    label1.setText("Es wird insgesamt 1 Münze benötigt");
    else
    label1.setText("Es werden insgesamt "+((Integer)gesamt).toString()+" Münzen benötigt");
    textArea1.setText(null);
    for(i=0;i<=7;i++)
    {
       if(anzahl_muenzen[i]!=0)
       {
         textArea1.insert((muenz[0][i]+" Euro: "+anzahl_muenzen[i]+"\n"),0);
         if (pruefung(i)==true)textArea1.insert(("ACHTUNG!WENIG VON DEN " + muenz[0][i]+" EURO MÜNZEN VORHANDEN!\n"),0);
       }
    }
    neuberechnen();

	//Prüfung 3

  public int abfragen(double muenze)
  {
       for(int i=0;i<=7;i++)
       {
         if(muenze==muenz[0][i])
         return (int)muenz[1][i];
       }
       return Exception("Eingegebene Münze nicht vorhanden!!");
  }

	//Ende Methoden

}
```


```
public class berechneWechselgeld
{
   public static void main(String[] args)
   {
      // Geldbetraege einlesen
      Out.print("Bitte geben Sie den zu zahlenden Betrag in Cent ein:");
      int zuZahlen = In.readInt();

      Out.print("Bitte geben Sie den gegebenen Geldbetrag in Cent ein:");
      int Preis = In.readInt();


      // Differenz, die zurueckgegeben werden muss, berechnen
      int rueckGeldBetrag = zuZahlen - Preis;

      // Ausgabe bei zu wenig gegebenem Geld oder passendem Betrag (kein Rueckgeld)
      if (rueckGeldBetrag < 0)
      {
         Out.println("Sie haben zu wenig Geld gegeben," +
               " es fehlen noch " + (-rueckGeldBetrag) + " Cent!");
      }
      else if (rueckGeldBetrag == 0)
      {
         Out.println("Kein Rueckgeld.");
      }


      /*
       * Solange Geld zurueckgeben, bis die Differenz zwischen
       * dem zu zahlenden Betrag und dem gegebenen Betrag 0 ergibt.
       */
      while (zuZahlen > 0)
      {
         if (rueckGeldBetrag >= 5)
         {
            rueckGeldBetrag = rueckGeldBetrag - 5;
            Out.println("5 zurueck");
         }
         else if (rueckGeldBetrag >= 2)
         {
            zuZahlen = rueckGeldBetrag - 2;
            Out.println("2 zurueck");
         }
         else
         {
            rueckGeldBetrag = rueckGeldBetrag - 1;
            Out.println("1 zurueck");
         }
      }
   }
}
```

Hab da mal was zusammengebastelt und hab jetzt ne totale blockade.
Naja wäre aufjedenfall nett, wenn mir jemand helfen könnte 

lg Sandra


----------



## XHelp (3. Dez 2010)

Wie lautet denn die Frage?


----------



## MendozZza (3. Dez 2010)

Der Code tut es leider nicht, der zeigt mir 19 Fehler an und wenn ich einen weg mache werden es mal mehr mal weniger ;(


----------



## Andi_CH (3. Dez 2010)

MendozZza hat gesagt.:


> Hab da mal was zusammengebastelt und hab jetzt ne totale blockade.
> Naja wäre aufjedenfall nett, wenn mir jemand helfen könnte
> 
> lg Sandra



Ach und darum kommt erst eine laaange Erklärung was es soll?
Übrigens Warnungen sind genau so wichtig wie Fehlermeldungen:

Fehler 1: Variablen werden klein geschrieben
Fehler 2: berechneWechselgeld als Klassennamen ist völlig daneben: Klassennamen sind die Substantive aus der Spec. berechneWechselgeld müsste eher eine Methode innerhalb einer Klasse sein
Muenzautomat:
Zeile 16 + 22: The assignment to variable zuZahlen has no effect!!! Was willst du da machen?
Zeile 71 Syntax error on token ")", { expected after this token -> ja, da fehlt eine Anweisung was zu tun ist!


Duplicate variable!
betrag cannot be resolved to a variable

Mein Gott - der Kompliler sagt dir doch alles! Mach es einfach.


Das musst du so machen.

```
//       return Exception("Eingegebene Münze nicht vorhanden!!");
       throw new Exception("Eingegebene Münze nicht vorhanden!!");
```

Ich kann nur sagen: Ran an die Arbeit - Solche Fehler zu beheben erachte ich nicht als unsere Arbeit


----------



## MendozZza (3. Dez 2010)

Hab jetzt eine schöne Lösung gefunden, es geht zwar auch einfacher mit zweidimensionen, aber einen funktionierenden Code macht man ja nicht kaputt 


```
public class Muenzautomat
{

	private int[] wg = new int[6];

	
	
	
	public int[] berechneWechselgeld(float preis, float geldbetrag)
	{
	
	int[] wechselgeld = new int[6];
	int iwechselgeld= Math.round(geldbetrag*100-preis*100);
	
	
	//Für 2€ 
	wechselgeld[0] = iwechselgeld/200;
	iwechselgeld = iwechselgeld%200;
	
	//Für 1€ 
	wechselgeld[1] = iwechselgeld/100;
	iwechselgeld = iwechselgeld%100;
	
	//Für 0,5€
	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,50€
	wechselgeld[5] = iwechselgeld/5;
	iwechselgeld = iwechselgeld%5;
	
	this.wg = wechselgeld;
	return wechselgeld;
	
	
	}

	public String toString()
	{
		String s = " ";
		for(int i = 0; i<wg.length;i++)
		{
		
			switch(i)
		{
			case 0: s+=" 2 Euro:";
				break;
			case 1: s+=" 1 Euro:";
				break;
			case 2: s+=" 0,50 Euro:";
				break;
			case 3: s+=" 0,20 Euro:";
				break;
			case 4: s+=" 0,10 Euro:";
				break;
			case 5: s+=" 0,05 Euro:";
				break;
				
			default: s+=" Fehler ";
				break;
		}
		
			s += wg[i];
			s += " ";
		}
		
		return s;
	}
	
	
	

}
```


```
import java.util.*;

public class berechneWechselgeld

{
	public static void main(String[] args)
	
	{
		Scanner sc = new Scanner(System.in);
		
		float fahrpreis, geldbetrag;
		System.out.println("Geben Sie den Fahrepreis ein:");
		fahrpreis= sc.nextFloat();
		System.out.println("Geben Sie den Geldbetrag ein, der reingeworfen wird:");
		geldbetrag= sc.nextFloat();
		
		Muenzautomat ma = new Muenzautomat();
		ma.berechneWechselgeld(fahrpreis, geldbetrag);
		System.out.println(ma);
	}
	
}
```

Danke für die Hilfe

Liebe Grüße


----------



## ARadauer (3. Dez 2010)

naja man kann sich ja ein seperates array mit den werten machen...


```
....
 private int[] muenzen ={200, 100, 50, 20,10,5,2,1};
    
    
    public int[] berechneWechselgeld(float preis, float geldbetrag)
    {
    
    int[] wechselgeld = new int[muenzen.length];
    int iwechselgeld= Math.round(geldbetrag*100-preis*100);
    
    for(int i = 0 ; i < muenzen.length; i++){
     //Für muenzen[i]€ 
       wechselgeld[i] = iwechselgeld/muenzen[i];
       iwechselgeld = iwechselgeld%muenzen[i];
    }
...
```
code verdopplung sollte man immer vermeiden!


----------



## MendozZza (3. Dez 2010)

Schön wenn man sich das Leben erleichtern kann


----------

