The constructor Bestellung(Bestellung.Produkt, Bestellung.Kunde) is undefined

Dark Crystal

Mitglied
Hallo :)

Ich habe folgende Aufgabe bekommen:
Legen Sie eine Klasse Bestellung an und modellieren Sie innerhalb dieser Klasse einen Bestellvorgang in
einem Online-Shop. Nutzen Sie dabei die Methoden in den vorgegebenen Klassen Kunde und Produkt,
die Einzelheiten der Realisierung von Bestellung bleibt dabei Ihnen selbst ¨uberlassen.


Mein Quellcode sieht so aus:
Java:
public class Bestellung {
	public String bestellnummer;

	
	Bestellung()
	{	
		bestellnummer = "1000";
	}
	
	public class Kunde
	{
	    private String name;
	    private String vorname;
	    private String strasse;
	    private String plz;
	    private String ort;
	    private boolean stammkunde;

	    Kunde (String n , String v , String s , String p , String o , boolean st)
	    {
		name = n;
		vorname = v;
		strasse = s;
		plz = p;
		ort = o;
		stammkunde = st;
	    }

	    public String get_name()
	    {return name;    }

	    public String get_vorname()
	    {return vorname; }
	    
	    public String get_strasse()
	    {return strasse;  }
	    
	    public String get_plz()
	    {return plz;}
	    
	    public String get_ort()
	    {return ort;   }
	    
	    public boolean ist_stammkunde()
	    {return stammkunde;  }
	}

	public class Produkt
	{
	    private int nummer;
	    private double preis;
	    private String bezeichnung;
	    private int anzahl_verfuegbar;

	    Produkt (int n, double p, String bez, int v)
	    {
		nummer = n;
		preis = p;
		bezeichnung = bez;
		anzahl_verfuegbar = v;
	    }

	    public int get_nummer()
	    {return nummer;  }

	    public double get_preis()
	    {return preis; }

	    public String get_bezeichnung()
	    {return bezeichnung; }

	    public int get_anzahl()
	    {return anzahl_verfuegbar;}

	    public void set_anzahl (int neue_anzahl)
	    {anzahl_verfuegbar = neue_anzahl; }
	}
	
	public void Rechnung()
	{
		System.out.println(CD.get_nummer() + " " + CD.get_bezeichnung());
		System.out.println("Rechnung für Bestellung Nr. " + bestellnummer + "\n");
		System.out.print(Isabella.get_vorname()+ " ");
		System.out.print(Isabella.get_name());
	}

	public static void main(String[] args)
	{
		
		Produkt CD = new Produkt(6990 , 15.51 , "Töffi" , 4);
		Kunde Isabella = new Kunde("Edelstein" , "Isabella" , "darf ich nicht sagen" , "51111" , "Nibelheim" , true);
		Bestellung b = new Bestellung(CD , Isabella);

		b.Rechnung();
		{}

	}
}

Mein Problem:
Ich bekomme diese Fehlermeldung:
The constructor Bestellung(Bestellung.Produkt, Bestellung.Kunde) is undefined.
Und weiß jetzt nicht so wirklich wie ich den Construktor richtig definiere.
Also, ich komme so weit wie ich jetzt bin und dann kommt ein großes schwarzes Loch, ich habe jetzt zwar schon stundenlang Foren, Google etc. durchgelesen aber irgendwie macht es gerade mal so gar nicht "klick".
Und da ich das alles erst seit ein paar Wochen lerne bin ich bei der ganzen Sache ziemlich wackelig auf den Beinen^^.
Wäre nett, wenn mir jemand das an diesem Beispiel erklären könnte, also was ich jetzt genau machen muss und warum.

Vielen Dank schonmal im voraus:)
 

w0ddes

Bekanntes Mitglied
EDIT: Sry, da hing wohl was mit meinem Internet! Diesen Post bitte löschen oder ignorieren :D
 
Zuletzt bearbeitet:
G

Gonzo17

Gast
Momentan hast du nur den Konstruktor "Bestellung()", du rufst aber in deinem Code einen Kostruktor mit zwei Parametern auf und den gibts eben nocht nicht. Alles was fehlt ist der entsprechende Konstruktor, den kannst du unter den ersten schreiben und der sieht so aus:

Java:
	public Bestellung(Produkt produkt, Kunde kunde) {
		// hier den Code
	}

Edit:
Was mir jetzt noch so auffällt.. so wie du das machst, kann das nicht klappen. In deiner main-Methode möchtest du ja drei Objekte erstellen, ein Produkt, ein Kunde und eine Bestellung. Da Produkt und Kunde aber innere Klassen von Bestellung sind, kannst du nicht einfach eine Instanz von ihnen erstellen, dazu bräuchtest du erst einmal eine Instanz von Bestellung. Macht also keinen Sinn die beiden Klassen als innere Klassen zu definieren (ich glaube aber, dass dir das nicht bewusst war, dass es innere Klassen sind).

Edit2:
Ein weiteres Problem wird dann bei der Klasse "Rechnung" auf dich zukommen, weil du dort davon ausgehst, dass diese Klasse die Objekte "CD" und "Isabella" kennt. Ist aber nicht so, weil sie ja nur in der main-Methode definiert wurden. Und allgemein würde ich für jede Klasse, die später wiederverwendet werden soll (was ja bei "Kunde" und "Produkt" auch durchaus Sinn macht), eine eigene Datei anlegen und nicht alles in eine Datei schreiben.
 
Zuletzt bearbeitet von einem Moderator:

w0ddes

Bekanntes Mitglied
Das Problem ist, wie die Exception schon sagt, dass der Konstruktor nicht definiert ist:

Du rufst einen Konstruktor mit Parametern auf:
Java:
new Bestellung(CD , Isabella);

aber dein Konstruktor
Java:
    Bestellung()
    {   
        bestellnummer = "1000";
    }
"weiß nicht", was er mit diesen Parametern machen soll.


Das ganze müsste man in etwa so schreiben:
Java:
Bestellung(Produkt produkt, Kunde kunde)
schreiben.

Außerdem sind da noch einige Abhängigkeiten drin, die man ändern KÖNNTE um das Programm allgemeiner zu machen. (ich hab jetzt grade keine Lust / Zeit, aber wenn du willst mach ich's heute nachmittag oder jemand andres machts hier bestimmt auch ;) )
 
Zuletzt bearbeitet:

Dark Crystal

Mitglied
Erstmal Danke für die sehr schnellen Antworten:)

Ich weiß ja gar nicht ob das jetzt so 100% richtig ist^^
Hatte aber auch einen Teil vergessen der wahrscheinlich für das Verständnis wichtig ist - mein Ziel ist das da:
Geben Sie nach jedem Bestellvorgang eine Rechnung aus.

Und ich habe da ja auch die Methode Rechnung gemacht (hoffe die ist auch so richtig) und in Rechnung soll ja z. B. bei "CD.get_nummer()" mit die CD Nummer ausgegeben werden.
Aber irgendwie kann Rechnung da nicht drauf zugreifen und eben auch bei den anderen Sachen (bis auf Bestellungsnummer) auch nicht.
Und jetzt muss ich ja irgendwie von den Klassen "Kunde" und "Produkt" die Attribute (Hoffe das ist jetzt richtig mit Attribute...die Variablen eben^^) in Bestellung kriegen. Aber ich weiß nicht wie^^
So habe ich mir das bis jetzt zumindest gedacht, kann natürlich auch totaler Müll sein.
....wie gesagt sehr wackelig^^
 

Dark Crystal

Mitglied
Ein weiteres Problem wird dann bei der Klasse "Rechnung" auf dich zukommen, weil du dort davon ausgehst, dass diese Klasse die Objekte "CD" und "Isabella" kennt. Ist aber nicht so, weil sie ja nur in der main-Methode definiert wurden. Und allgemein würde ich für jede Klasse, die später wiederverwendet werden soll (was ja bei "Kunde" und "Produkt" auch durchaus Sinn macht), eine eigene Datei anlegen und nicht alles in eine Datei schreiben.

Also soll ich da mit Packages arbeiten?
Und dann quasi die Daten von Kunde und Produkt in Bestellung "importieren"?
 
G

Gonzo17

Gast
Ne, nicht unbedingt mit Packages. Also, im Prinzip hast du ja so oder so ein Package (und wenns auch nur das default package ist) und da müssen eben alle deine Klassen rein. Ne neue Klasse kannste in Eclipse erstellen, indem du Rechtsklick auf das Package machst und dort auf New > Class klickst. Die Idee dabei ist, dass du eben deine Klassen sauber getrennt hast und nur dann Objekte von ihnen instanziierst, wenn du sie brauchst. Ich würde übrigens auf eine Klassen "Rechnung" verzichten, ich würde eher eine Methode in "Bestellung" schreiben, die "showBill()" oder so heisst.
 

Dark Crystal

Mitglied
Sooo ich glaube ich habe es endlich geschafft^^

Java:
public class Bestellung {
	String bestellnummer;
	
	Bestellung() 
	{ bestellnummer = "100"; }
	
	public void showBill(Produkt produkt , Kunde kunde) {
		System.out.print("Rechnungsnummer: " +bestellnummer+ "\n");
		System.out.print("Name: " +kunde.get_name()+ "," +kunde.get_vorname()+ "\n");
		System.out.print("Anschrift: " +kunde.get_strasse()+ "\n          " +kunde.get_plz()+ " " +kunde.get_ort()+ "\n\n");
		System.out.print("Ihre Bestellung: \n");
		System.out.print("Artikel: " +produkt.get_bezeichnung()+ "(" +produkt.get_nummer()+ ") " +produkt.get_preis()+ " €" );
	}
	
	public static void main(String[] args) {
		Produkt produkt = new Produkt(1001 , 15.51 , "Töffi" , 4);
		Kunde kunde = new Kunde("Edelstein" , "Isabella" , "Am Hexenhaus 33" , "51111" , "Nibelheim" , true);
		Bestellung b = new Bestellung();
		
		b.showBill(produkt , kunde);
		{}
	}
}
Kunde und Produkt habe ich wie beschrieben in Eclipse verstaut.

So ist das Ok oder? :)
 
G

Gonzo17

Gast
Das schaut gut aus. Und wenns in Eclipse keinen Fehler wirft, dann sollte das auch klappen. Aber ich würde rein von der Logik das ein bisschen anders aufbauen. Im Moment is das so, dass du Bestellungen erzeugen kannst, aber die einzige Information, die eine Bestellung hat, ist die Bestellnummer. An welchen Kunden das geht und um was für ein Produkt es sich handelt weiss die Bestellung selbst nicht. Deswegen würde ich vorschlagen, dass du Variablen für das Produkt und den Kunden anlegst und die dann im Konstruktor initialisierst (so wie du es vorhin machen wolltest, aber da fehlte der Konstruktor ja). Und dann musst du bei "showBill()" auch keine Parameter übergeben, sondern rufst die Methode einfach so auf.

Achja, was mir da noch so einfällt. Am besten nimmst du für Namen von Variablen, Klassen, Methoden, usw immer englische Bezeichner. Wenn du deutsche Namen nimmst, dann immer deutsch, aber tut man selten. War jetzt aber auch meine Schuld, weil ich dir nen englischen Methodennamen vorgeschlagen hab. ^^
 

Dark Crystal

Mitglied
Also dann so oder?

Java:
public class Bestellung {
	private String bestellnummer;
	private String vorname;
	private String name;
	private String straße;
	private String plz;
	private String ort;
	private String bezeichnung;
	private int nummer;
	private double preis;
	
	Bestellung(Produkt produkt , Kunde kunde) {
		this.name = kunde.get_name();
		this.vorname = kunde.get_vorname();
		this.straße = kunde.get_strasse();
		this.plz = kunde.get_plz();
		this.ort = kunde.get_ort();
		this.bezeichnung = produkt.get_bezeichnung();
		this.nummer = produkt.get_nummer();
		this.preis = produkt.get_preis();
		bestellnummer = "100";
	}
	
	public void zeigeRechnung() {
		System.out.print("Rechnungsnummer: " +bestellnummer+ "\n");
		System.out.print("Name: " +name+ ", " +vorname+ "\n");
		System.out.print("Anschrift: " +straße+ "\n           " +plz+ " " +ort+ "\n\n");
		System.out.print("Ihre Bestellung: \n");
		System.out.print("Artikel: " +bezeichnung+ "(" +nummer+ ") " +preis+ " €" );
	}
	
	public static void main(String[] args) {
		Produkt produkt = new Produkt(1001 , 15.51 , "Töffi" , 4);
		Kunde kunde = new Kunde("Edelstein" , "Isabella" , "Am Hexenhaus 33" , "51111" , "Nibelheim" , true);
		Bestellung b = new Bestellung(produkt , kunde);
		
		b.zeigeRechnung();
		{}
	}
}
 
Zuletzt bearbeitet:
G

Gonzo17

Gast
Ja das sieht gut aus auf den ersten Blick :)
Zwei kleine Schönheits"fehler" hab ich noch gefunden. In Zeile 39 ist ein Block, der nichts tut, die Zeile kannste einfach löschen. Und deine get-Methoden der Kunden-Klasse sehen ja alle so aus: "get_Var()". Ich würde aber eher schreiben "getVar()", also ohne "_", das ist aber denke ich nicht so wichtig und nur ne Sache des Aussehens.
 

Suinos

Bekanntes Mitglied
Abgesehen von solchen Unschönheiten:
Dark Crystal hat gesagt.:
Java:
.get_name()
[...]
.get_bezeichnung()
, fallen mir noch diese Klammern auf, die im leeren Raum stehen:
Dark Crystal hat gesagt.:
[java=39]
{}
[/code]

Ausserdem:
Versuch einmal, die Rechnung zweimal nacheinander aufzuzeigen, also etwa so:
Java:
b.zeigeRechnung();
b.zeigeRechnung();

Was fällt dir auf?

@edit: bah, Vordrängler :p
 
Zuletzt bearbeitet:

Dark Crystal

Mitglied
Ok, hab die Sachen geändert^^

Versuch einmal, die Rechnung zweimal nacheinander aufzuzeigen, also etwa so:
Java:
b.zeigeRechnung();
b.zeigeRechnung();

Was fällt dir auf?

Das einzige was mir auffällt ist, dass die Rechnung(en) nicht sauber untereinander dargestellt werden.
Hab das jetzt mit einem Absatz gelöst.
Oder hätte mir da noch was anderes auffallen sollen?
 
G

Gonzo17

Gast
Ich denke das meinte er. Alternativ kannst du statt print auch println benutzen, schau dir mal an was da passiert. Damit kannste du es dir nämlich sparen am Ende immer ein "\n" hinzuzufügen. :)
 

Dark Crystal

Mitglied
Ja, das war meine Lösung^^

Java:
	public void zeigeRechnung() {
		System.out.print("Rechnungsnummer: " +bestellnummer+ "\n");
		System.out.print("Name: " +name+ ", " +vorname+ "\n");
		System.out.print("Anschrift: " +straße+ "\n           " +plz+ " " +ort+ "\n\n");
		System.out.print("Ihre Bestellung: \n");
		System.out.println("Artikel: " +bezeichnung+ "(" +nummer+ ") " +preis+ " €" );
		System.out.println("------------------------");
Ich hatte das vorher mit den /n gemacht, weil ich das auch mal "Üben" wollte bzw. gucken ob das auch so geht^^.

So, dann vielen Dank für eure Hilfe und die ganze Geduld ich denke ich habe es jetzt verstanden:)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
U Interface | constructor injection Java Basics - Anfänger-Themen 5
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
S Copy - Constructor vs clone() Java Basics - Anfänger-Themen 20
F The constructor Vehikel(String, int) is undefined warum?? Java Basics - Anfänger-Themen 4
L constructor cannot be applied... Java Basics - Anfänger-Themen 22
L Constructor is undefined Java Basics - Anfänger-Themen 4
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S CSVReader funktioniert nicht ---- The Constructor CSVReader(String) is undefined Java Basics - Anfänger-Themen 4
M Vererbung - Cannot Find Symbol constructor... Java Basics - Anfänger-Themen 11
S The constructor File(URL) is undefined Java Basics - Anfänger-Themen 10
N Klassen constructor Rückgabewert Java Basics - Anfänger-Themen 10
S Constructor und Main Methode Java Basics - Anfänger-Themen 3
S cannot find symbol, symbol: constructor Java Basics - Anfänger-Themen 2
B Copy-Constructor Java Basics - Anfänger-Themen 6
L Erste Schritte Super Constructor mit Array - Liste? Java Basics - Anfänger-Themen 15
T Cannot refer to an instance field xxx while explicitly invoking a constructor Java Basics - Anfänger-Themen 14
M Was macht bzw. was bringt ein constructor? Java Basics - Anfänger-Themen 12
S Problem beim Kompilieren - cannot find symbol - constructor() Java Basics - Anfänger-Themen 12
W Default Constructor Java Basics - Anfänger-Themen 4
H OOP java.sql.Date does not have a no-arg default constructor Java Basics - Anfänger-Themen 2
S Array of objects und ständige Constructor-Aufrufe Java Basics - Anfänger-Themen 4
D Unhandled Exception type IOException in Constructor Java Basics - Anfänger-Themen 1
B Im Constructor anderen Constructor aufrufen Java Basics - Anfänger-Themen 13
U Implementierung Constructor Java Basics - Anfänger-Themen 7
J Hilfe mit Constructor Java Basics - Anfänger-Themen 3
G The constructor is ambiguous Java Basics - Anfänger-Themen 1
S BufferedWriter undefined constructor Java Basics - Anfänger-Themen 5
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
C Ein letzter Fehler mit dem Constructor ! Java Basics - Anfänger-Themen 17
G Constructor & Graphics g Java Basics - Anfänger-Themen 5
N Constructor.isSynthetic() Java Basics - Anfänger-Themen 4
V Problem mit Symbol constructor Java Basics - Anfänger-Themen 5
G constructor auflösen? Java Basics - Anfänger-Themen 10
E Methoden Beste Bestellung Java Basics - Anfänger-Themen 13
M Bestellung Ausgeben bis Bestellung zuende Java Basics - Anfänger-Themen 3
L Erste Schritte Programm Bestellung/Rechnung addieren Java Basics - Anfänger-Themen 3
C Button - neues Fenster - Bestellung anzeigen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben