Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Trainee
Date of registration: Oct 2nd 2006
Location: NRW -> Bad Oeynhausen
Occupation: B.Sc. Informatik, 8.Semester
Quoted
Original von hamena314
[...] du musst NICHT dafür sorgen, dass dein Programm auch alle Möglichkeiten, den Konstruktor anzusprechen korrekt erkennt, [...]
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Quoted
Original von retr0virus
... und nicht eine variable Variable einführt.
This post has been edited 2 times, last edit by "Marco" (May 19th 2007, 9:51pm)
Turner, Serveradmin & Workaholic
Date of registration: Apr 25th 2006
Location: Südstadt
Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))
Quoted
Original von hamena314
Ich denke, bei den Konstruktoren ist es beinahe egal, ob man sie per 0->1->2->3 durchschleift, oder per 0->3, 1->3, 2->3, denn letztendlich landen alle bei 3.
Vielleicht hat man bei 0->1->2->3 eine durchschaubarere Logik und Code-Struktur, aber ich denke, darum gehts eh nicht bei der Aufgabe.
Quoted
Original von hamena314
Aber jetzt habe ich glatt selbst eine Frage:
Man soll ja ein Car-Objekt erzeugen, das eine Methode toString besitzt (naja, eigentlich überschreibt :rolleyes und dazu ein Engine-Objekt, das ebenfalls eine toString-Methode hat.
Wie schaffe ich es denn jetzt, in der toString-Methode von Car mir die Motordaten von der toString-Methode von Engine anzeigen zu lassen?
Ich habe das nur geschafft, weil ich der Car-toString Methode noch das Engine-Objekt als Parameter mitgeben. In der Aufgabenstellung steht jedoch nichts davon, ausserdem kann man nur direkt bei der Erzeugung des Car-Objektes darauf zugreifen.
Reicht das und ist damit korrekt, oder wie kann ich auf die toString Methode aus der anderen toString-Methode zugreifen? ?
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
This post has been edited 1 times, last edit by "hamena314" (May 20th 2007, 12:12am)
Turner, Serveradmin & Workaholic
Date of registration: Apr 25th 2006
Location: Südstadt
Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))
Quoted
Original von hamena314
Hm, ich denke, man soll in der toString-Methode von Car die toString-Methode von Engine aufrufen?
Quoted
Original von hamena314
Denn sonst verstehe ich nicht, wie das mit der Instanzvariablen gemeint sein soll.
Ich möchte halt folgendes machen:
- Car-Objekt erzeugen: createLuxuryCar();
- in der Methode createLuxuryCar() wird Car() aufgerufen und damit das Car-Objekt erzeugt:
createLuxuryCar(){
Car audi = new Car();
}
- durch Car() wird automatisch ein Engine-Objekt erzeugt:
Engine v8 = new Engine();
Quoted
Original von hamena314
- Jetzt möchte ich die Methode toString von audi aufrufen, damit ich die Daten ausgegeben bekomme:
System.out.println(audi.toString());
Status: 1
Tankgrösse: 60.0 Liter
Motordaten: -> toString() Methode von Engine ->
Typ X, 177 PS (10 Zylinder)
So wie ich die Aufgabenstellung verstehe, soll man hier X mit einem int-Wert angeben (die Instanzvariable in Car).
Wie kann ich also in Car die Car-toString Methode aufrufen für die Engine-toString Methode, wenn das Engine-Objekt erst später erzeugt wird?
Vielleicht habe ich gerade nur ein Brett vor dem Kopf, aber ich weiss einfach nicht, wie ich die Engine-toString Methode in der Car-toString Methode aufrufen kann...
Bei den Parametern des Konstruktors kannst du i.d.R. davon ausgehen, dass diese von außen richtig angegeben werden. Normalerweise dokumentiert man dann nach außen sichtlich, was für Paramter der Konstruktor erwartet (ein Schritt wäre dafür z.B. den Parametern sinnvolle Namen zu geben).Quoted
Original von schnecke
Dann gleich noch was, wie ist das mit der Reihenfolge gemeint? So das es egal ist ob ich z.b. "Treibstoff, Motor und Leistung" angebe oder "Motor, Leistung, Treibstoff"? Wenn dem so ist, wie prüfe ich denn welche Angabe was ist? Also ich wüsste schon wie ich das unterscheide, aber in einem Konstruktor kann ich ja z.b. keine if-Abfrage machen,....
Ich würde mir eher ein Konstruktor schreiben, der alles macht, und dann von den anderen Konstruktoren diesen Konstruktor aufrufen. Das macht vor allem Sinn, wenn man den Konstruktor ändern muss, da man dann nur wirklich einen Konstruktor ändern muss.Quoted
Ich denke mal, linear macht am meisten Sinn. So kann man am besten das Programm erweitern, strikt nach dem DRY-Prinzip
Dont repeat yourself
Also in der Folge, 0->1, 1->2, 2->3, ....
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Source code |
|
1 2 3 |
public Engine(){ this(std_hp, std_cyl, std_fuel); } |
This post has been edited 1 times, last edit by "Brainbug" (May 20th 2007, 4:27pm)
This post has been edited 3 times, last edit by "Neo" (May 20th 2007, 6:30pm)
Turner, Serveradmin & Workaholic
Date of registration: Apr 25th 2006
Location: Südstadt
Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))
Quoted
Wenn man aber folgendes Schema verwendet:
1->2
2->3
3->4
Dann braucht man nur den Konstruktor 3 anpassen.
Quoted
public Engine(){
this(std_hp, std_cyl, std_fuel);
}
Quoted
Original von Markus:
Ich würde mir eher ein Konstruktor schreiben, der alles macht, und dann von den anderen Konstruktoren diesen Konstruktor aufrufen. [...] Außerdem ist es IMHO besser lesbarer (man muss sich nicht erst von oben nach unten durchsuchen).
Darüber hinaus könnte ich mir vorstellen (weiß es also nicht), dass man sich dadurch noch ein wenig Rechenzeit spart, weil nicht sämtliche Konstruktoren sondern nur zwei aufgerufen werden müssen.
(Übernehme aber keine Garantie für Richtigkeit )