Klassen über Main Klasse in einer anderen Klasse ein Objekt erstellen

bc2356

Mitglied
Hi, wir sind gerade am Anfang von Java und haben gerade das Programmieren von Klassen und erstellen von Objekten , sowie dessen Auslesung gelernt.
Nun habe ich folgendes Problem:

Ich habe folgende Main Klasse
Java:
/**
*
* Main-Klasse zum Testen der Implementierung.
*
* @author ---
*
*/


public class Main {

	/**
	* @param args Keine Übergangsvariablen.
	*/
	
	public static void main(String[] args){

		//Erstellung der Objekte.
			Container container1 = new Container(ContainerType.CUP, ContainerCapacity.MEDIUM,1);
			Espresso espresso1 = new Espresso(CoffeeType.LIGHT,1);
			Milk milk1 = new Milk(1);
			Milk milk2 = new Milk(2);
			Sweetener sweetener1 = new Sweetener(SweetenerType.SYRUP,1);
			Sweetener sweetener2 = new Sweetener(SweetenerType.SUGAR,1);

			
			Coffee coffee1 = new Coffee(
				new Container(ContainerType.CUP, ContainerCapacity.MEDIUM,1),
				new Espresso(CoffeeType.LIGHT,1),
				new Milk(1),
				new Milk(2),
				new Sweetener(SweetenerType.SYRUP,1),
				new Sweetener(SweetenerType.SUGAR,1),
				1
			);


		//Ausgabe
		
		coffee1.printCoffee();
		System.out.println("");
		milk1.printMilk();
		container1.printContainer();
		sweetener1.printSweetener();

		

		
	}


}

meine Coffee - Klasse
Java:
/**
* Representiert das komplette Kaffeegetränk.
* @author ---
*
*/


class Coffee {

	//Attribute

	/*Kaffee Behälter*/
	Container container;
	
	/*verwendeter Espresso*/
	Espresso espresso;

	/*Portion Milch 1*/
	Milk milk_1;
	
	/*Portion Milch 2*/
	Milk milk_2;

	/*Portion Süßungsmittel 1*/
	Sweetener sweetener_1;
	
	/*Portion Süßungsmittel 2.*/
	Sweetener sweetener_2;

	/*Gesamtpreis des Getränks*/
	int price;



	//Methoden

	/** Konstruktor
	*@param c Behälter des Kaffees
	*@param e Espressostärke
	*@param m1 Milch1
	*@param m2 Milch2
	*@param s1 Sweetener1
	*@param s2 Sweetener2
	*@param p Preis
	*/
	Coffee(Container c, Espresso e, Milk m1, Milk m2, Sweetener s1, Sweetener s2, int p) {
		container = c;
		espresso = e;
		milk_1 = m1;
		milk_2 = m2;
		sweetener_1 = s1;
		sweetener_2 = s2;
		price = p;
	}
	

	/** Ausgabe der gesamten Daten des Kaffeegetränks. */
	void printCoffee() {
		
		System.out.print("gewählter Behälter: ");
		System.out.println(container);
		System.out.print("gewählte Espresso-Stärke: ");
		System.out.println(espresso);
		System.out.println(milk_1);
		System.out.println(milk_2);
		System.out.print("Süßungsmittel: ");
		System.out.println(sweetener_1);
		System.out.println(sweetener_2);
		System.out.print("Preis des Getränks: ");
		System.out.println(price);
	}
	
}

und zB eine Klasse "Container"
Java:
/**
*
* Representiert die Klasse: Behälter.
* 
* @author ---
*/


class Container {

	//Attribute

		/** Art des Behälters */
		ContainerType type;
	
		/** Kapazität des Behälters */
		ContainerCapacity capacity;
	
		/** Preis des Behälters */
		int price;

	//Methoden
		
		/** Konstruktor für Behälter */
		Container(ContainerType t , ContainerCapacity c, int p) {
			type = t;
			capacity = c;
			price = p;
		}
		
		/** Ausgabe der Behälter-Daten */
		void printContainer() {
			System.out.print("Art des Behälters: ");
			System.out.println(type);
			System.out.print("Kapazität des Behälters: ");
			System.out.println(capacity);
			System.out.print("Preis des Behälters: ");
			System.out.println(price);
		}

}

weiterhin eine ContainerType Klasse
Java:
/**
*
* Aufzählung der Behälter-Arten.
*
* @author ---
*
*/


enum ContainerType {
	BEAKER,CUP,GLASS;
}

Es geht um ein Kaffeegetränk, welches verschiedene Attribute bekommen soll wie zB Starker/Mittlerer/Schwacher Espresso , Große/mittlere/kleine Tasse/Glas/Becher, Milch , Zucker/Sirup/Süßstoff usw.

Die ersten Aufgaben beinhalten lediglich die Erstellung der Klassen und den Abruf der einzelnen über die Main-Klasse wie zb Abrufen des Containers sowie dessen Ausgabe
Java:
Container testContainer = new Container(ContainerType.CUP, ContainerCapacity.SMALL, 1);

testContainer.printContainer()

Dabei kommen dann Dinge raus wie:

BehälterArt=CUP
BehälterKapazität=SMALL
Preis=1

das funktioniert alles mit den jeweiligen Klassen.

Nun müssen wir eine Coffee Klasse erstellen und über diese, alle Daten des gesamten Kaffe-getränks auslesen.
dh es soll etwas in der Ausgabe stehen wie:

Tasse(mittel), Espresso(schwach),Milch, Zucker

Nun, bei meiner Ausführung gibt er mir in der Konsole folgendes aus:


gewõhlter Behõlter: Container@36a06816
gewõhlte Espresso-Stõrke: Espresso@5d11985e
Milk@2e2a730e
Milk@64e7b3cf
S³▀ungsmittel: Sweetener@27ce0eca
Sweetener@492d0430
Preis des Getrõnks: 1

Preis von einer Portion Milch: 1
Art des Behõlters: CUP
Kapazitõt des Behõlters: MEDIUM
Preis des Behõlters: 1
Art des S³▀ungsmittels: SYRUP
Preis: 1




wobei der untere Teil noch das Auslesen der einfachen Aufgaben war, wie oben beschrieben. Habe ich nur rein um zu sehen obs denn noch klappt.

Kann mir vllt jemand einen Tipp geben , wie ich statt zb
gewählter Behälter: Container@36a06816

-> gewählter Behälter: CUP ( LARGE ) oder etwas wie
gewählter Behälter :
Art : CUP
Kapazität: LARGE

bekomme?
 
Zuletzt bearbeitet:
Hey Danke für den Tip, hab mir jetzt zwar einige Beispiele dazu angesehen, aber mit der Anwendung auf meine Aufgabe hat es nicht geklappt!
 
Hi,

Wie sieht deine toString Methode aus?? Sie muss sich in der klasse Container befinden.


Gruss martin
 
Hallo,

java bietet zwei verschiedene toString()- Methoden an.
Unüberschrieben wird die toString()- Methode von Object genommen, dort wird dann der Klassenname + HashWert angegeben.
Dieser HashWert beschreibt die Speicheradresse deines Objekts.
 
Ja also meine Professorin hats mir jetzt erklärt, obwohl das erst nächstes Semester kommt:

in class Container einfügen:

Java:
	public String toString()  {
		return "- Art: " + type + "; Kapazität: " + capacity + "; Preis: " + price;
	}

in class coffee einfügen:

Java:
//toString()Methode von Container , für main
	public String toString(){

		return "Kaffeegetränk \n" + container.toString() + "\n" + 
			espresso.toString() + milk_1 + milk_2 + sweetener_1 + sweetener_2 + 
			"- Preis: " +price;
	}

und in Main.class

Java:
String kaffee = coffee1.toString();
		System.out.println( kaffee );

also Sie hat es mir erklärt , dass man den String quasi erst übesetzen muss, bevor man ihn nach der Übergabe ausgeben muss.

hätte es aber einfach so machen können:

Coffee.java
Java:
/** Ausgabe der gesamten Daten des Kaffeegetränks. */
	void printCoffee() {
		container.printContainer();
		espresso.printEspresso();
		milk1.printMilk();
		milk2.printMilk();
		sweetener1.printSweetener();
		sweetener2.printSweetener();
		System.out.println("Gesamtpreis: "+price);
		

	}

anstatt meiner oben angegebenen System.print.outln ....
 

Zurück
Oben