# Bankomat Beispiel



## giant (10. Jan 2012)

Hallo Leute,

Also ich muss ein Bankomatbeispiel programmieren, die Aufgabenstellung lautet wie folgt:



> Das Besondere an diesem Bankomat ist, dass man weder Karte noch Code benötigt, um abzuheben ;-)
> 
> In den Attributen (scheine500, scheine200, ...) ist jeweils die Anzahl der 500er-Scheine, 200er-Scheine, ... gespeichert.
> 
> ...




Nun das hier habe ich schon gemacht:


```
public class Bankomat
{
    private int scheine500;
    private int scheine200;
    private int scheine100;
    private int scheine50;
    private int scheine20;
    private int scheine10;
    
    //Konstruktor
    public Bankomat()
    {
        scheine500 = 0;      
        scheine200 = 0;
        scheine100 = 0;
        scheine50 = 0;
        scheine20 = 0;
        scheine10 = 0;
    }
    
    public void befuellen(int schein, int anzahl)
    {
        if ( schein == 10 ||schein == 20 || schein == 50 || schein == 100 || schein == 200 ||schein == 500 )
        {
            
            if (schein == 10)
            {
                scheine10 = anzahl;    
            }
            
            if (schein == 20)
            {
                scheine20 = anzahl;    
            }
            
            if (schein == 50)
            {
                scheine50 = anzahl;    
            }
            
            if (schein == 100)
            {
                scheine100 = anzahl;    
            }
            
            if (schein == 200)
            {
                scheine200 = anzahl;    
            }
            
            if (schein == 500)
            {
                scheine500 = anzahl;
            }
                
        }
        
        else
        {
            System.out.println("Mein Sohn, diese Scheine gibt es nicht!");
        }
    }
    

    
    public void auszahlen(int betrag)
    {   
        int betrScheine500 = 0;
        int betrScheine200 = 0;
        int betrScheine100 = 0;
        int betrScheine50 = 0;
        int betrScheine20 = 0;
        int betrScheine10 = 0;
        

      if (scheine500 <= betrScheine500)
      { 
            betrScheine500 = scheine500;
            betrag = betrag - (500 * (betrScheine500));
      }
     
      if (scheine200 <=  betrScheine200)
      {
        betrScheine200 = scheine200;
        betrag = betrag - (200 * (betrScheine200));
      }

      if (scheine100 <= betrScheine100)
      {
        betrScheine100 = scheine100;
        betrag = betrag - (100 * (betrScheine100));
      }
      
      if (scheine50 <= betrScheine50)
      {
        betrScheine50 = scheine50;
        betrag = betrag - (50 * (betrScheine50));
      }
      
      
      if (scheine20 <= betrScheine20)
      {
        betrScheine20 = scheine20;
        betrag = betrag - (20 * (betrScheine20));
      }
       
      if (scheine10 <= betrScheine10)
      {
        betrScheine10 = scheine10;
        betrag = betrag - (10 * (betrScheine10));
      }
      
      if (betrag == 0)
      {
          if(betrScheine500 != 0)
          {
          System.out.println("500-Scheine: " + betrScheine500);
          scheine500 = scheine500 - (betrScheine500);
          }
          if(betrScheine200 != 0)
          {
          System.out.println("200-Scheine: " + betrScheine200);
          scheine200 = scheine200 - (betrScheine200);
          }
          if(betrScheine100 != 0)
          {
          System.out.println("100-Scheine: " + betrScheine100);
          scheine100 = scheine100 - (betrScheine100);
          }
          if(betrScheine50 != 0)
          {
          System.out.println("50-Scheine: " + betrScheine50);
          scheine50 = scheine50 - (betrScheine50);
          }
          if(betrScheine20 != 0)
          {
          System.out.println("20-Scheine: " + betrScheine20);
          scheine20 = scheine20 - (betrScheine20);
          }
          if(betrScheine10 != 0)
          {
          System.out.println("10-Scheine: " + betrScheine10);
          scheine10 = scheine10 - (betrScheine10);
          }
      }
      else
      {
          System.out.println("Nicht genügend Scheine vorhanden!");
      } 
    }
}
```

Nun wenn ich "50er scheine 5 mal" eintippe, lässt er mich nicht abheben, jedes mal wird der Wert "Nicht genügend Scheine" ausgeliefert.


Weis jemand wo mein Problem liegt?

LG


----------



## Final_Striker (10. Jan 2012)

> Weis jemand wo mein Problem liegt?



Wenn man als Anfänger noch nicht mit dem Debugger umgehen kann, dann helfen oft [c]System.out.println(...)[/c] Ausgaben weiter. So kann man feststellen ob bestimmte Codeteile wie Schleifen oder Bedingungen überhaupt ausführt werden.


----------



## SlaterB (10. Jan 2012)

es fehlt auch noch eine zweite Klasse, die initial befüllt und Eingabe einliest usw., oder?


----------



## Gast2 (10. Jan 2012)

In der befüllen Methode setzt du die Anzahl vor allem immer auf den übrgebenen Wert. Denke mal kurz darüber nach was passiert, wenn schon Scheine drin waren!


----------



## qowaz (10. Jan 2012)

Ich würde mir an deiner Stelle erst mal ein paar Konstanten anlegen:


```
private static final int scheine500 = 500;
```

Und dann kannst du die Methode befuellen() auch korrekt nutzen:


```
public void befuellen(int schein, int anzahl){
  
  switch(schein){
    case 500: scheine500 = anzahl;
  }
}
```


----------



## Gast2 (10. Jan 2012)

qowaz hat gesagt.:


> Ich würde mir an deiner Stelle erst mal ein paar Konstanten anlegen:
> 
> 
> ```
> ...


Das ist jawohl totaler Quatsch

1) Eine static final int kann man nicht neu zuweisen. Das gibt nen Compiler Error! 
2) Der von mir gegeben Hinweis ist hier immernoch falsch. Was passiert denn deiner Meinung nach, wenn schon Geld iM Automat drinne war? Werden die bei euch nur befüllt wenn nichts mehr drin ist?


----------



## qowaz (10. Jan 2012)

Das war wirklich Quatsch, da hat sich ein Tippfehler eingeschlichen.


```
private static final int schein500 = 500;
```


----------



## SlaterB (10. Jan 2012)

wenn, dann wohl zwei, der zweite mit ziemlich vielen Tippern, meintest du 

```
switch(schein){
    case schein500: scheine500 = anzahl;
  }
```
?
nun ja, 500 als Zahl kann man durchaus auch direkt verwenden, 
das wird sich kaum mehr ändern oder sonst wie zu verwechseln sein


----------



## Gast2 (10. Jan 2012)

Und auch jetzt ist es immer noch falsch. 
Nochmal die Frage: "Was passiert wenn schon Scheine drin waren?"


----------



## SlaterB (10. Jan 2012)

die werden rausgenommen 
muss nicht zwingend falsch sein


----------

