Bankomat Beispiel

G

giant

Gast
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.

Ein neuer Bankomat ist leer, d.h. alle scheineXXX-Atribute haben den Wert 0.

Daher muss der Bankomat befüllt werden. Die Methode befuellen(...) hat 2 Parameter:

schein: gibt an, welche scheine nachgelegt werden (z.B. 50 - es werden 50er-Scheine nachgelegt).

anzahl: gibt an, wieviele Scheine nachgelegt werden.

Mit der Methode auszahlen(...) kann man den Bankomat veranlassen, einen bestimmten Betrag auszuzahlen. Der Automat muss nun berechnen, ob und mit welchen Scheinen er den Betrag auszahlen kann. Dabei gilt die Regel, dass er immer mit den größtmöglichen Scheinen auszahlt. Die Anzahl der jeweiligen Scheine wird auf der Konsole ausgegeben.

Beispiel: Der Betrag 790 soll ausgezahlt werden - Ausgabe auf der Konsole:

500-Scheine: 1
200-Scheine: 1
50-Scheine: 1
20-Scheine: 2

Natürlich muss dabei überprüft werden, ob die benötigten Scheine überhaupt verfügbar sind. Falls nicht, wird eine Fehlermeldung ausgegeben: Betrag nicht verfügbar.

Bei einer Auszahlung müssen auch die Werte der entsprechenden scheineXXX-Attribute reduziert werden.


Nun das hier habe ich schon gemacht:

Java:
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

Top Contributor
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.
 
S

SlaterB

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

Gast2

Gast
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

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

Java:
private static final int scheine500 = 500;

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

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

Gast2

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

Java:
private static final int scheine500 = 500;

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

Java:
public void befuellen(int schein, int anzahl){
  
  switch(schein){
    case 500: scheine500 = anzahl;
  }
}
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

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

Java:
private static final int schein500 = 500;
 
S

SlaterB

Gast
wenn, dann wohl zwei, der zweite mit ziemlich vielen Tippern, meintest du
Java:
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
 
G

Gast2

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

Neue Themen


Oben