# Flaschen und Becher befüllen



## Paz (28. Mrz 2012)

Hallo,

Aufgabe:

• Erstellen Sie ein Programm, welches eine bestimmte Anzahl von Flaschen
und Bechern realisiert (jeweils 5).
• Stellen Sie sicher mittels eines Klassenattributes sicher, dass jede Flasche
eine maximale Füllmenge von 0,75 Litern hat (in einem zweiten
Programmlauf verändern sie diesen Wert auf 1,0 Litern).
• Das Hauptprogramm soll die maximale Füllmenge der einzelnen Flaschen
ausgeben, die Flaschen befüllen, und auch feststellen, ob eine Flasche
überläuft. Nach jedem Schritt soll die noch verbleibende Füllmenge der
Flaschen ausgegeben werden. Danach sollen Inhalte von Flaschen in
verschiedene Becher gegossen werden.
• Überprüfen Sie danach mittels der equals Methode ob zwei
Flaschen(Objekte) gleich sind, also den gleichen Inhalt haben. Realisieren
Sie dies auch für die jeweiligen Becher.

Bin jetzt bei dem befüllen der Becher, aber irgendwie tut er dies nicht....
Hoffe mir kann einer helfen

1.Klasse


```
public class flaschenbefüllen {

	public static void main(String[] args) {

		//Array von Flaschen erzeugen
		Flaschen flaschen[] = new Flaschen[5];
		
		for(int i=0; i<flaschen.length; i++){	
			flaschen[i] = new Flaschen();
			System.out.print("Die maximale Füllmenge der " + (i+1)
					+". Flasche betrgägt: "
					+flaschen[i].getMaxFüllstand()+" ml - ");
			//Flasche komplett befüllen
			flaschen[i].auffüllen();
			System.out.println("Flasche befüllt");
		}
		//Array von Bechern erzeugen
		Becher becher[] = new Becher[5];

		//hilfsvariablen für Schleifendurchlauf und Arrayverwaltung
		int b = 0;
		int f = 0;
		int füllung, rest;
		/*
		 * Schleife läuft so oft bis alle Becher befüllt sind
		 * oder kein Flaschen mehr vorhanden sind
		 */
		while(b < 5 && f < 5){
			becher[b] = new Becher();
			/*
			 * Prüfung ob die Füllung in den Becher passt
			 * bzw ob der Rest der Flasche genommen werden kann
			 */
			if(flaschen[f].getFüllStand() == flaschen[f].getMaxFüllstand()
					&& flaschen[f].getFüllStand() > becher[b].getMaxFüllstand())
				//Füllung abzüglich dem Überlauf
				füllung = flaschen[f].getFüllStand() - (flaschen[f].getFüllStand() -                becher[b].getFüllStand());
			else
				//Einfüllung des Restes aus der Flasche
				füllung = flaschen[f].getFüllStand();

			//Berechnung des vorhandenen Restes der noch in der Flasche ist
			rest = flaschen[f].getFüllStand() - füllung;

			//Füllung des Bechers
			becher[b].setFüllstand(füllung);
			
			//Setzen des Restes der noch in der Flasche ist
			flaschen[f].setFüllstand(rest);
			
			//Wenn der Becher voll ist nächsten Becher nehmen
			if(becher[b].getFüllStand() == becher[b].getMaxFüllstand())
				b++;
			//Wenn die Flasche leer ist nächste Flasche nehmen
			if(flaschen[f].getFüllStand() == 0)
				f++;
		}

	}
}
```

2.Klasse


```
public class Flaschen{

private int maxfüllstand = 750;
private int füllstand = 0;


public Flaschen(){

	}

	public void auffüllen(){
		füllstand = maxfüllstand; //in milliliter
	}

	public void setFüllstand(int neuerFüllstand){
		füllstand = neuerFüllstand;
	}

	public int getMaxFüllstand(){
		return maxfüllstand;
	}

	public int getFüllStand(){
		return füllstand;
	}

}
```

3.Klasse


```
public class Becher{

private int maxfüllstand = 500;
private int füllstand = 0;


public Becher(){

	}

	public void setFüllstand(int neuerFüllstand){
		füllstand = neuerFüllstand;
	}

	public int getMaxFüllstand(){
		return maxfüllstand;
	}

	public int getFüllStand(){
		return füllstand;
	}

}
```


----------



## VfL_Freak (28. Mrz 2012)

Moin,

Zuerst einmal solltest Du dringend auf die Umlaute in den Namen verzichten (also bspw. "Fuellstand" anstatt "Füllstand") !!



Paz hat gesagt.:


> Bin jetzt bei dem befüllen der Becher, aber irgendwie tut er dies nicht....


Die Fehlerbeschreibung ist leider recht dürftig ... :noe:
Wo genau passiert denn nicht das, was Du willst - und was genau sollte dort passieren?

Ich denke mal nicht, dass sich hier einer durch 100te Zeilen Code wühlt, ohne genau zu wissen, woinach er suchen muss ...

Gruß
Klaus


----------



## ARadauer (28. Mrz 2012)

Ich hab mirs jetzt im Detail auch nicht angesehen, aber als Anfänger würde ich bei so komplexen if auf keinen fall die { } weg lassen...


----------



## trez (28. Mrz 2012)

Paz hat gesagt.:


> • Überprüfen Sie danach mittels der equals Methode ob zwei
> Flaschen(Objekte) gleich sind, also den gleichen Inhalt haben. Realisieren
> Sie dies auch für die jeweiligen Becher.



Becher und Flasche müssen die equals Methode haben, also Comparable implementieren.

Ausserdem schreit das förmlich nach einer abstrakten Klasse Gefaess mit der abstrakten Methode befuellen und einem Konstruktor der die maximale Füllmenge mitbekommt...
Nicht nett ist, dass die maximale Füllmenge eines Bechers nicht spezifiziert ist -> nachfragen oder eine Annahme treffen.

Nur du, TO kannst vermuten "what the theacher is fishing for" ... Vererbung? Interfaces? ...

edit: Die methode befuellen und der aktuelle Fuellstand sollte direkt in der Vaterklasse "Gefaess" implementiert werden...


----------

