IT-Studium/ Aufgabe eclipse

dipsi5

Newbie
Dabei seit
Mai 2010
Beiträge
6
Hallo zusammen.
Ich bin im Programmieren neu, habe java im IT-Studium medizin. Richtung ein Semester, aber nach Kara wurden wir mit Aufgaben überschüttelt. Bitte, hilft mir. Ich stelle hier die Aufgabe ein:
Als Mitarbeiter der Firma KrösusTools AG haben Sie die Aufgabe, einen
Geldautomaten zu programmieren, der Euro-Beträge in 5-, 20- und 50-Euro-
Scheinen auszahlt. Erstellen Sie dazu eine Klasse Geldautomat, die die Anzahl der
im Automat vorhandenen Geldscheine verwaltet und folgende öffentliche Methoden
zur Verfügung stellt:
public void nachfuellen(int neu5er,
int neu20er,
int neu50er)
Der Vorrat an 5er-, 20er- und 50er-Scheinen wird um die angegebene
Anzahl erhöht.
public void auszahlen(int betrag)
Der angegebene Betrag wird ausgezahlt, falls möglich. Es sind nur Beträge
erlaubt, die positiv und Vielfache von 5€ sind. Der Automat versucht immer,
möglichst große Scheine auszugeben. Kann der Betrag ausbezahlt werden,
wird durch System.out.println() die Anzahl der Scheine angezeigt. Kann der
Betrag nicht ausbezahlt werden, da ein unzulässiger Betrag eingegeben
wurde oder die Scheine im Automat nicht reichen, wird eine Fehlermeldung
ausgegeben. Es werden keine Teilbeträge ausbezahlt!
public int gesamtbetrag()
Bestimmt den noch insgesamt im Automaten verfügbaren Geldbetrag.
- 3 von 4 -
public void inhaltAusgeben()
Gibt aus, wie viele 50€-, 20€- und 5€-Scheine noch verfügbar sind.
Fabrikneu enthält der Geldautomat keine Geldscheine.
Achten Sie bei der Implementierung auf das Geheimnisprinzip. Der Zugriff auf die
gespeicherten Geldscheine soll nur über die oben angegebenen Operationen
möglich sein.
Zu Test finden Sie im Public-Verzeichnis die Datei TestGeldautomat.java, die
die Klasse Geldautomat verwendet. Die erwarteten Ergebnisse sind in der Datei
als Kommentar aufgeführt.
T

Und folgendes habe ich geschrieben:


public class Geldautomat {

Geldautomat geldautomat1 = new Geldautomat();


int schein05er = 200;
int schein20er = 100;
int schein50er = 50;

int Guthaben = schein05er + schein20er + schein50er;



public void nachfuellen (int neu5er,int neu20er,int neu50er){

this.schein05er = schein05er + neu5er;
this.schein20er = schein20er + neu20er;
this.schein50er = schein50er + neu50er;

}
public void auszahlen (int betrag) {

this.Guthaben = Guthaben;

if (betrag <= Guthaben && !(betrag % 5 != 0)) {

Guthaben = Guthaben - betrag;
}
if (betrag >= 50){
if (!(betrag % 50 != 0)){
int schein50 = betrag / 50;
this.schein50er = schein50er - schein50;
if (betrag % 50 != 0){
int rest = betrag % 50;

if (rest >= 20){
if (!(rest % 20 != 0)){
int schein20 = rest / 20;
this.schein20er = schein20er - schein20;
if (betrag % 20 != 0){
int rest2 = rest % 20;

if (rest2 >= 5){
int schein05 = rest2 / 5;
this.schein05er = schein05er - schein05;
System.out.println ( "Sei bekommen " + schein50 + " 50er Scheine" +
schein20 + " 20er Scheine" +
schein05 + " 5er Scheine ausbezahlt");

nachfuellen (4, 6, 8);

}
}
}
}
}
}
}
}

public void gesamtbetrag(){

int gesamtbetrag = Guthaben;

System.out.println ( " Gesamtbetrag: " + gesamtbetrag);

}

public void inhaltAusgeben(){
this.schein05er = schein05er;
this.schein20er = schein20er;
this.schein50er = schein50er;

System.out.println( "Es sind noch " + schein05er + " 05er Scheine und " +
schein20er + " 20er Scheine und " +
schein50er + " 50er Scheine vorhanden.");
}

}

Das Programm läuft gar nicht, ich weiß, dass ich eine Niete im Programmieren bin, aber vielleicht bekomme ich ein Paar Tipps.:( Danke im Vorraus.
 

r34ln00b

Lt. Commander
Dabei seit
Feb. 2006
Beiträge
1.029
Kann gut sein, dass ich mich irre, aber ging das überhaupt in Java, dass man ein neues Objekt von etwas erzeugt, was man gerade erst programmiert?
Also:
Code:
public class XY {
 XY AAA = new XY();
 ...
}
Man würde eine Klasse über die Klasse selbst definieren, oder? Bzw. ist das möglich?
 
Zuletzt bearbeitet:

charmin

Admiral
Dabei seit
Mai 2004
Beiträge
8.305
nope. Dazu braucht man eine Startklasse. :)

Noch ein Tip an Rande. Bitte gewöhne dir gleich einen sauberen Programmierstil an (Einrückung, Kommentare etc) dann sieht das ganze gleich leserlicher aus. Hier ein kleines Beispiel:

Code:
class Test()
{
     public static void main (String[] args)
     {
         //Konsolenausgabe;
          System.out.println("Hallo Welt!");
     }
}
 
Zuletzt bearbeitet:

dipsi5

Newbie
Ersteller dieses Themas
Dabei seit
Mai 2010
Beiträge
6
Dies ist mein erstes Programm, deswegen kann gut sein, dass vieles falsch ist. Ich habe eine Klasse definiert (habe jetzt auch zweite Zeile gelöscht mit neu erzeugtem Objekt), dann mehrere Methoden mit einmaligen Aufrufen einer Methode, was eben gar nicht klappt.
 

NiThDi

Lt. Commander
Dabei seit
Feb. 2005
Beiträge
1.916
Um sauber und lesbar zu programmieren, trennt man immer GUI und das eigentlich Programm.

Du brauchst also erstmal 2 Klassen.
Die erste nenst du eben "public class Geldautomat". Darin enthalten sind all die geforderten Methoden.

Die zweite nnenst du dann zB "public class GeldautomatGUI". Darin enthalten muss die main Methode sein: "public static void main(String[] args)"

Du erhälst dann 2 java Dateien. 1. Geldautomat.java 2.GeldautomatGUI.java

In der main handelst du dann Ein- und Ausgaben.

Und gewöhn dir unbedingt an einzurücken. Das macht es nicht nur dem Leser leichter, sondern auch dir selbst wenn du einen Fehler suchst.

Edit:
Folgendes ist mir noch aufgefallen:

public void inhaltAusgeben(){
this.schein05er = schein05er;
this.schein20er = schein20er;
this.schein50er = schein50er;

System.out.println( "Es sind noch " + schein05er + " 05er Scheine und " +
schein20er + " 20er Scheine und " +
schein50er + " 50er Scheine vorhanden.");
}

Lass die Zeilen mit this.xxx weg. du weist der Variable scheinXXer damit nur wieder scheinXXer zu.
 
Zuletzt bearbeitet:

BadMadMax

Lt. Junior Grade
Dabei seit
Apr. 2004
Beiträge
299
Könnt ihr nicht coden oder wieso labert ihr von allem nur nicht von dem was er wissen will?

ps: es ist recht viel falsch. aber sagtest ja "Ich bin im Programmieren neu, habe java im IT-Studium medizin"
 

slyd

Cadet 3rd Year
Dabei seit
Okt. 2005
Beiträge
35
also wie nithdi schon gesagt hast brauchst du ne 2te klasse mit main mehtode um überhaupt was ausführen zu können, bzw. nen pnkt zu haben an dem das programm starten kann. in ner klasse eine instanz der klasse zu erzeugen läuft auch nicht ( Geldautomat geldautomat1 = new Geldautomat(); )

ansonsten läuft dein coding!

Hau einfach mal das mit rein und du wirst merken die ausgabe funktioneiert

public class Main {


public static void main(String[] args) {
Geldautomat g1 = new Geldautomat();
g1.inhaltAusgeben();
}

}

diese zuweisungen
this.schein05er = schein05er;
this.schein20er = schein20er;
this.schein50er = schein50er;
sowie diese
this.schein50er = schein50er - schein50;
sind sinnfrei, erste kannst du dir ganz sparen, beim zweiten einfach
schein50er = schein50-schein50;

außerdem solltest du die attribute als private attribute deklarieren, bin mir grad nicht sicher wies aussieht wenn du sie nicht explizit als private deklarierst
 
Zuletzt bearbeitet:

NiThDi

Lt. Commander
Dabei seit
Feb. 2005
Beiträge
1.916
Könnt ihr nicht coden oder wieso labert ihr von allem nur nicht von dem was er wissen will?

ps: es ist recht viel falsch. aber sagtest ja "Ich bin im Programmieren neu, habe java im IT-Studium medizin"
Du scheinst ja besonders schlau zu sein. Macht sich immer gut rumzumaulen und dann nciht einen Satz zum Problem zu schreiben.

Und um sein Problem zu lösen, muss er erstmal GUI und Programm sauber trennen. Dann sieht er vllt. auch selbst, wo ein paar Fehler sind und das sollte auch das Zeil sein.

Wenn wir ihm jetzt alles hinklatschen hat er dabei ja nichts gelernt.

Edit: "Es ist recht viel falsch" - super Satz. inwiefern hat ihm das jetzt besser geholfen als irgendeine andere Antwort in diesem Thread?
 
Zuletzt bearbeitet:

Fortatus

Lt. Commander
Dabei seit
Juni 2009
Beiträge
1.288
Bitte zur weiteren Hilfe das ganze in Code-Tags packen und wie von charmin gezeigt formatieren. Das wichtigste ist, dass man den Überblick behält.

Und zur objektorientierten Programmierung: Klassen sind sowas wie "Baupläne" für Objekte. Objekte sind dann wirkliche Instanzen, wo dann Daten drin stehen. Du sagst also in der Klasse, die Klasse hat die Variablen "int schein05er" usw. Was du jetzt gemacht hast, wie r34ln00b bereits erwähnte ist Klassen verschachteln. Grundsätzlich ist es möglich, dass eine Klasse ein Objekt einer anderen Klasse besitzt, aber
Code:
public class Geldautomat
    {

    Geldautomat geldautomat1 = new Geldautomat();
Verschachtelt sich selber. Stell es dir so vor:
Du sagst, bau mir ein Haus aus dem Plan XY. Plan XY ist die Klasse. In dem Moment wo du im Programm sagst "Baue XY" guckt er im Plan und sieht "Plan XY besitzt ein Objekt XY". Im Plan vom Haus steht also, dass das Haus 4 Wände, Dach und Boden hat _und_ ein weiteres Objekt Haus. Du baust also ein Haus im Haus, und dieses Haus besitzt wieder ein Haus.

Du baust also unendlich viele Häuser/Objekte, weil ein erzeugtes Objekt wieder ein Objekt gleicher Art erzeugt.

Ich kenne Java nicht, sondern nur C++, deswegen hoffe ich, ich rede keinen Müll, ansonsten jemand der Java kann, sich melden, dann lösch ich den ganzen Dreck ;)

@NiThDi: Braucht man in Java ne GUI oder gehts nicht auch mit Konsoleneingabe?!

Weiterer Hinweis: "Geheimnisprinzip": Die Variablen müssen im c++-Jargon "private" oder "protected" sein und nicht mehr "public", sonst kann jemand geldautomat1.schein50er = 1000000; nutzen. Aber es soll ja nur über die Nachfüllen-Funktion möglich sein.
 
Zuletzt bearbeitet:

NiThDi

Lt. Commander
Dabei seit
Feb. 2005
Beiträge
1.916
Naja GUI heißt ja nicht zwangsläufig das man ein Programmfenster hat. So hats uns zumindest unser Prof beigebracht.
Konsole geht natürlich auch. Hab persönlich auch noch keine Erfahrungen mit Programmfenstern gemacht und weiß lediglich, dass es mit Swing oder so funktionieren soll.
 

Fortatus

Lt. Commander
Dabei seit
Juni 2009
Beiträge
1.288
Eben, und in der Standardbibliothek vorgegebene Klassen muss man nicht neuschreiben, sondern nur im Mainthread zusammen mit einem Objekt von Geldautomat nutzen. In diesem Fall reichen 2 Klassen also locker aus.
 

NiThDi

Lt. Commander
Dabei seit
Feb. 2005
Beiträge
1.916
Aber um nochmal auf das Problem zurück zu kommen:

Du brauchst wie gesagt 2 java dateien.

1. Geldautomat.java:
Code:
public class Geldautomat {
  
  schein05er = 200;
  // die restlichen Attribute

  // Dann deine Methoden. Die sahen nicht schlecht aus.

}
2. Testgeldautomat.java (die hast du ja lt. Aufgabenstellung schon)
Code:
public class TestGeldautomat {

  public static void main(String[] args) {

    geldautomat myGeldautomat = new Geldautomat();

    //So eine Methode müsste da drin stehen. Das ist praktisch der Einstiegspunkt für dein 
       Programm. Hier werden deine Eingaben warscheinlich abgearbeitet.
  }

}
So ist der prinzipielle Aufbau. Und jetzt heißt es n bisschen im Vorlesungsscript lesen und Fehler beseitigen. Da du ja wie gesagt den Großteil schon richtig hast, sollte der Rest eigentlich kaum noch ein problem sein.
 

Elessar_CH

Cadet 4th Year
Dabei seit
Dez. 2007
Beiträge
111
Hier wäre noch eine Musterlösung. Aber merke dir dazu folgenden Grundsatz:
Verwende/Kopiere nur Code den du auch verstehst.
Hier dürfte das nicht so schwierig sein, aber der gilt generell.

Code:
package ch.myPackage.cb;

public class Geldautomat {
	private int fuenfer;
	private int zwanziger;
	private int fuenfziger;
	
	public Geldautomat() {
		fuenfer = 0;
		zwanziger = 0;
		fuenfziger = 0;
	}
	

	public void nachfuellen(int neu5er, int neu20er, int neu50er) {
		this.fuenfer += neu5er;
		this.zwanziger += neu20er;
		this.fuenfziger += neu50er;
	}
	
	public void auszahlen(int betrag) {
		if (betrag %5 == 0 && betrag >= 0) {
			//Betrag ist ein vielfaches von 5 und grösser oder gleich 0
			if (this.gesamtbetrag() < betrag) {
				// Vorhandener Betrag ist kleiner als geforderter Betrag
				System.out.println("Es ist leider zu wenig Geld im Automat.");
			} else {
				
				//Folgende Funktionalität könnte eleganter gelöst werden.
				
				// so viele Fünfziger müssten ausbezahlt werden 95 / 50 = 1 (Integer-Empfangsfeld)
				int s50 = betrag / 50;
				
				if (s50 > fuenfziger) {
					// Wenn zu wenig Fuenfziger im Automat sind, werden die vorhandenen Fuenfziger ausbezahlt.
					s50 = fuenfziger;
				}
				// Summe der ausbezahlten 50er wird vom Betrag abgezogen.
				betrag = betrag - s50*50;
				
				// Dies wird nun mit 20ern unf 5ern wiederholt
				
				int s20 = betrag / 20;
				if (s20 > zwanziger) {
					s20 = zwanziger;
				}
				betrag = betrag - s20*20;
				
				int s05 = betrag / 5;
				if (s05 > fuenfer) {
					s05 = fuenfer;
				}
				betrag = betrag - s05*05;
				
				if (betrag > 0) {
					// Es sind nicht genügend Scheine vorhanden um den geforderten Betrag auszubezahlen (z.B. gefordert 40 und nur 1x50 vorhanden)
					System.out.println("Der Betrag kann leider nicht ausbezahlt werden.");
				} else {
					// Betrag kann ausbezahlt werden
					this.fuenfer -= s05;
					this.zwanziger -= s20;
					this.fuenfziger -= s50;
					
					System.out.println("Sie erhalten " + s50 + " 50€ Scheine, " + s20 + " 20€ Scheine " + s05 + " 5€ Scheine");
				}
			}
		} else {
			// Betrag kein vielfaches von 5 oder kleiner als 0
			System.out.println("Betrag muss ein positives vielfaches von 5 sein!");
		}
	}
	
	public int gesamtbetrag() {
		int betrag;
		
		betrag = 5 * fuenfer;
		betrag += 20 * zwanziger;
		betrag += 50 * fuenfziger;
		
		return betrag;
	}
	
	public void inhaltAusgeben() {
		System.out.println("Es sind noch " + fuenfer + " 5€ Scheine, " + zwanziger + " 20€ Scheine und " + fuenfziger + " 50€ Scheine vorhanden!");
	}
}
Code:
package ch.myPackage.cb;

public class TestGeldautomat {
	
	public static void main(String[] args) {
		Geldautomat ga = new Geldautomat();
		
		ga.auszahlen(-5);
		ga.auszahlen(4);
		ga.auszahlen(5);
		System.out.println(ga.gesamtbetrag());
		
		ga.nachfuellen(20, 20, 20);
		System.out.println(ga.gesamtbetrag());
		ga.inhaltAusgeben();
		
		ga.auszahlen(50);
		
		System.out.println(ga.gesamtbetrag());
		ga.inhaltAusgeben();
		
		ga.auszahlen(1335);
		
		System.out.println(ga.gesamtbetrag());
		ga.inhaltAusgeben();
		
		ga.auszahlen(100);
		
		System.out.println(ga.gesamtbetrag());
		ga.inhaltAusgeben();
		
		ga.nachfuellen(0, 0, 20);
		
		System.out.println(ga.gesamtbetrag());
		ga.inhaltAusgeben();
		
		ga.auszahlen(40);
	}

}
 

refri89

Cadet 4th Year
Dabei seit
Mai 2010
Beiträge
95
brauchst kein package und nicht zwei klassen:
die statische Methode public static void main(String arg[]) ist der Einsprungspunkt eines jeden Java Programms, da kannst du ein Geldautomat Objekt erzeugen und dessen Methoden aufrufen.
Die Klassenvariablen sind private deklariert, damit eine andere Klasse nicht darauf zugreifen kann. Die werte können nur von Funktionen(=Methoden) der eigenen Klasse direkt verwendet werden und sind ausserhalb unsichtbar. (So sollts ja sein beim Bankautomat)

Was ich weggelassen habe, bei auszahlen() sind die Fälle wo z.B. keine 50er mehr da sind aber z.B. 28 20er Scheine und etlicher 5er Scheine und man will z.B. 150Euro auszahlen lassen. Dann gehts ja vom Gesamtbetrag, allerdings muß man den Betrag ohne Fuffies zusammenstellen, aber selber willst sicher ja auch noch was machen...

public class Geldautomat {

public static void main(String arg[])
{
Geldautomat ga = new Geldautomat();
ga.fülleAutomat(200,100,50);
ga.setzeGuthaben(297);
ga.inhaltAusgeben();
ga.anzeigenGuthaben();
ga.auszahlen(143);
ga.anzeigenGuthaben();
ga.inhaltAusgeben();
ga.auszahlen(25);
ga.anzeigenGuthaben();
ga.inhaltAusgeben();
ga.auszahlen(135);
ga.anzeigenGuthaben();
ga.inhaltAusgeben();
ga.auszahlen(4195);
ga.anzeigenGuthaben();
ga.inhaltAusgeben();
ga.nachfuellen (400, 6, 8);
ga.anzeigenGuthaben();
ga.inhaltAusgeben();
ga.auszahlen(4195);
ga.anzeigenGuthaben();
ga.inhaltAusgeben();
}

private int schein05er;
private int schein20er;
private int schein50er;

private int Guthaben;

public Geldautomat()
{
System.out.println("Hallo, ich bin die Geldautomat-Klasse");
}

private void fülleAutomat(int arg50er,int arg20er, int arg05er)
{
schein05er = arg50er;
schein20er = arg20er;
schein50er = arg05er;
}

private void setzeGuthaben(int arg_Guthaben)
{
Guthaben = arg_Guthaben;
}

private void nachfuellen (int neu5er,int neu20er,int neu50er)
{
schein05er = schein05er + neu5er;
schein20er = schein20er + neu20er;
schein50er = schein50er + neu50er;
}

public void auszahlen (int betrag)
{
if ( (betrag <= Guthaben) && ((betrag % 5) == 0) )
{
//wenn man hier ist is es ein gültiger Betrag
int n50er,n20er,n05er;


n50er = betrag / 50;
n20er = ( betrag % 50 ) / 20;
n05er = ((betrag % 50 ) % 20) / 5;

System.out.println ( "Für den Betrag: "+betrag+" ist eine Auszahlung möglich" );
System.out.println ( "Sei bekommen " + n50er + " 50er Schein(e)" +
n20er + " 20er Schein(e)" +
n05er + " 5er Schein(e) ausbezahlt");

schein50er = schein50er - n50er;
schein20er = schein20er - n20er;
schein05er = schein05er - n05er;

Guthaben = Guthaben - betrag;
}
else
{
if(betrag > Guthaben)
System.out.println ( "Für den Betrag: "+betrag+" ist keine Auszahlung möglich, da Betrag ihr Guthaben überschreitet" );
if ( (betrag % 5) != 0 )
System.out.println ( "Für den Betrag: "+betrag+" ist keine Auszahlung möglich, da Betrag kein Vielfaches von fünf Euro" );
}
return;
}

public void anzeigenGuthaben()
{
System.out.println ( " Gesamtbetrag: " + Guthaben);
}


public void inhaltAusgeben()
{
System.out.println( "Es sind noch " + schein05er + " 05er Scheine und " +
schein20er + " 20er Scheine und " +
schein50er + " 50er Scheine vorhanden.");
}

}
 
Zuletzt bearbeitet:

Fortatus

Lt. Commander
Dabei seit
Juni 2009
Beiträge
1.288
Elessar_CHs Lösung ist trotzdem eleganter. Versuch doch nicht guten Code schlecht zu reden. Wenn OO, dann auch richtige Trennung von Objekten und main-Funktion. Sonst kann man auch direkt prozedural programmieren. Ich glaube das ist nicht der Sinn der Übung. Zumal er es immerhin schafft seinen Code in die entsprechenden Tags zu setzen und zu formatieren.
 

refri89

Cadet 4th Year
Dabei seit
Mai 2010
Beiträge
95
Welchen Code habe ich schlecht geredet ? Wer beurteilt das, was eleganter ist, ich jedenfalls nicht. Keinen Vorredner noch Vorschlag hab ich schlecht gemacht, lediglich meinen Senf abgegeben.

Aber wenn hier schon das Thema schöne Objektorientiertheit hochgespielt wird, tät ich an deiner Stelle lieber empfehlen, daß "Guthaben" (besser Konto) als eigene Klasse definiert wird, denn ein Geldautomat besitzt nicht die Eigenschaft, daß das Guthaben eines Bankkunden Bestandteil eines Geldautomaten ist. Dann brauchen wir noch die Klasse Bank usw. so gesehen sind alle hier geposteten Lösungen ( auch meine !!! ) nach deiner Maßgabe der reinste Schei... und du widersprichst dir quasi selbst !

(P.S. des muß mir mal einer zeigen wie er die main-Funktion in java vonnem Objekt trennt...)
 
Zuletzt bearbeitet:

dipsi5

Newbie
Ersteller dieses Themas
Dabei seit
Mai 2010
Beiträge
6
Herzlichen Dank an Euch alle, die so nett waren mir meine Fehler deutlich zu zeigen. Am Anfang nach 3 ersten Anworten, war ich schon recht frustriert. Nichtsdestotrotz, konnte ich nach späteren Beiträgen begreifen, was das Problem war.
Zum einen hatte ich alles in eine Klasse gepackt, da ich nach 2 Vorlesungen Eclipse dachte, dass die Mainklasse eine Methode sei, die ein Programm ausführt, allerdings habe ich bei meinen Methoden eine Hauptmethode gar nicht sehen/definieren können:(
Dann die elegante Lösung mit Auszahlen() von Elessar_CH - einfach super!!! Danke schön dafür.;)
Ebenfalls alle Anderen, die sich beteiligt haben. Danke für die genommene Zeit. Ich muss echt sagen, ist nicht ganz das Meine, allerdings ein Semester Java ist ausschlaggebend für Datenbanken und Datamining.
Übrigens, ich bin nicht "er", ich bin eine "sie".;)

Hier das Resultat:


public class Geldautomat {

private int schein05er;
private int schein20er;
private int schein50er;

public Geldautomat() {
schein05er = 0;
schein20er = 0;
schein50er = 0;
}


public void nachfuellen (int neu5er,int neu20er,int neu50er){

this.schein05er += neu5er;
this.schein20er += neu20er;
this.schein50er += neu50er;

}
public void auszahlen(int betrag) {
if (betrag % 5 == 0 && betrag >= 0) {
//Betrag ist ein vielfaches von 5 und grösser oder gleich 0
if (this.Gesamtbetrag() < betrag) {
System.out.println("Es ist leider zu wenig Geld im Automat.");
}
else {
int s50 = betrag / 50;

if (s50 > schein50er) {
// Wenn zu wenig Fuenfziger im Automat sind, werden die vorhandenen Fuenfziger ausbezahlt.
s50 = schein50er;
}
// Summe der ausbezahlten 50er wird vom Betrag abgezogen.
betrag = betrag - s50*50;

// Dies wird nun mit 20ern unf 5ern wiederholt

int s20 = betrag / 20;
if (s20 > schein20er) {
s20 = schein20er;
}
betrag = betrag - s20*20;

int s05 = betrag / 5;
if (s05 > schein05er) {
s05 = schein05er;
}
betrag = betrag - s05*05;

if (betrag > 0) {
// Auszahlung nicht möglich, weil nicht genügend Scheine vorhanden sind.
System.out.println("Der Betrag kann leider nicht ausbezahlt werden.");
} else {
// Betrag kann ausbezahlt werden
this.schein05er -= s05;
this.schein20er -= s20;
this.schein50er -= s50;

System.out.println("Sie erhalten " + s50 + "Stk." +
" 50€ Scheine, " + s20 + "Stk." +
" 20€ Scheine " + s05 + "Stk." +
" 5€ Scheine");
}
}
}
else {
System.out.println("Betrag muss größer Null und vielfaches von 5 sein!");
}
}

public int Gesamtbetrag() {
int betrag;

betrag = 5 * schein05er;
betrag += 20 * schein20er;
betrag += 50 * schein50er;

return betrag;
}


public void inhaltAusgeben(){

System.out.println( "Es sind noch " + schein05er + "Stk." + " 5€ Scheine und " +
schein20er + "Stk." + " 20€ Scheine und " +
schein50er + "Stk." + " 50€ Scheine vorhanden.");

}
}

und
TestGeldautomat.java


public class TestGeldautomat {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Geldautomat myGeldautomat = new Geldautomat();

myGeldautomat.auszahlen(-5);
myGeldautomat.auszahlen(20);
System.out.println(myGeldautomat.Gesamtbetrag());

myGeldautomat.nachfuellen(10, 20, 30);
System.out.println(myGeldautomat.Gesamtbetrag());
myGeldautomat.inhaltAusgeben();

System.out.println(myGeldautomat.Gesamtbetrag());
myGeldautomat.inhaltAusgeben();

myGeldautomat.auszahlen(1225);

System.out.println(myGeldautomat.Gesamtbetrag());
myGeldautomat.inhaltAusgeben();

}

}
 
Top