Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Quoted
Implementieren Sie hierzu eine einfach verkettete Liste[...]
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Source code |
|
1 2 3 |
class Vehicle { ... } |
Source code |
|
1 2 3 |
class Vehicle extends Object { ... } |
Source code |
|
1 |
Object neuesAuto = new Vehicle; |
This post has been edited 1 times, last edit by "Schokoholic" (Jun 26th 2007, 2:55pm)
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
This post has been edited 1 times, last edit by "hamena314" (Jun 26th 2007, 3:51pm)
Quoted
Aber das würde bedeuten, ich bräuchte neben dem Next-Element auch ein Previous-Element, oder bin ich da auf dem Holzweg?
This post has been edited 1 times, last edit by "Markus" (Jun 26th 2007, 4:48pm)
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Quoted
Original von hamena314
[...]Ich erzeuge zunächst einen Knoten "start" mit "public Knoten start".[...]
Quoted
[..]
Jetzt soll dem in der add-Methode das Car-Objekt übergeben werden, indem man per start = new Knoten(auto) dem Knoten start das zuweist.
Nun ist mein Problem, dass ich nicht verstehe, was in den next-Teil kommt, denn so kann ich zwar per start.daten.ausgeben() anzeigen lassen, welches Car sich darin befindet, doch adde ich zu der Liste einen weiteren Knoten mit einem neuen Car-Objekt, wird das alte Objekt überschrieben und is weg, bei start.daten.ausgeben() steht also lediglich das neue Car-Objekt und ich verstehe nicht wieso.
This post has been edited 1 times, last edit by "Markus" (Jun 26th 2007, 8:23pm)
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
This post has been edited 1 times, last edit by "hamena314" (Jun 26th 2007, 10:06pm)
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Ich vermute mal, daß zu diesem Zeitpunkt start == null gilt. Daher: Ist beim Aufruf von add(...) die liste leer, so muß es start = new Knoten(auto) heißen.Quoted
Original von hamena314
public void add(Car auto){
start.next = new Knoten(auto); // erzeugt NullPointerException
}
This post has been edited 1 times, last edit by "Joachim" (Jun 26th 2007, 10:22pm)
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
OK. Die leere Liste würde damit bei Dir nur aus einem Knoten bestehen, dessen Nachfolger null ist. Das ist eine Möglichkeit. Etwas eleganter fände ich es, die leere Liste dadurch zu kennzeichnen, daß der Startknoten auf null gesetzt wird. Damit würdest Du es vermeiden, einen Knoten in der Liste zu haben, der selber keinen Inhalt enthält und nur als Markierung dient.Quoted
Original von hamena314
Hm, das Ende ist doch dadurch gekennzeichnet, dass der Next-Teil auf null zeigt. Damit wäre start doch mein erster Knoten, der zu Beginn und damit alleine auf null zeigen müsste.
Bei der leeren Liste müßte in jedem Fall start == ende gelten (egal, welche der beiden oben von mir beschriebenen Designentscheidungen man trifft). Das ist hier aber nicht der Fall. Zudem frage ich mich, warum Du "start = new Knoten(ende)" setzt. Damit wäre start ein neuer Knoten, dessen *Inhalt* wieder ein Knoten ist ...Quoted
2) Jetzt erzeuge ich einen Start- und einen End-Knoten.
private Knoten start;
private Knoten ende = new Knoten(null);
Kettenliste(){
start = new Knoten(ende);
ende = new Knoten(null);
}
Der Nachfolger des neuen Knoten soll also der Startknoten sein? Damit würde man die neuen Knoten am Anfang der Liste einfügen. Ist das Absicht?Quoted
public void add(Car auto){
Knoten neuer = new Knoten(auto);
neuer.next = start;
Der Nachfolger des Startknotens soll zudem der neue Knoten sein? Damit würdest Du einen Zyklus erschaffen ...Quoted
start.next = neuer;
}
Zerschmetterling
Date of registration: Aug 31st 2003
Location: Hannover
Occupation: Informatikstudent (d'uh)
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class Knoten { public Knoten next; public Car daten; Knoten(Car auto){ daten = auto; } public void setDaten(Car wagen){ daten = wagen; } public Car getDaten(){ return daten; } public boolean hasNext(){ if (next == null){ return false; } else return true; } public void setNext(Knoten node){ this.next = node; } } |
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Kettenliste { public Knoten start = new Knoten(null); public Knoten ende = new Knoten(null); public Kettenliste(){ start.setNext(ende); ende.setNext(null); } public void add(Car auto){ Knoten neuer = new Knoten(auto); start.setNext(neuer); neuer.setNext(ende); } public void print() { Knoten aktuell = start; while (aktuell != null){ System.out.println(aktuell.getDaten()); aktuell = aktuell.next; } } |
Source code |
|
1 2 3 4 |
Ausgabe: null // entspricht Datenteil vom Start-Knoten Name: vw // entspricht Datenteil von ...? null // entspricht Datenteil vom Endknoten(?) |
This post has been edited 2 times, last edit by "hamena314" (Jun 27th 2007, 4:30pm)
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Die Klasse Knoten sieht gut aus.Quoted
Original von hamena314
Ich habe jetzt die Klassen angepasst, in der Knotenklasse gibts jetzt die neuen Methoden:
Quoted
Original von hamena314
Hm, so langsam glaube ich auch, dass ich da was grundlegendes doch nicht verstanden habe, bloß was?
Wenn ich in der add()-Methode dem next-Teil einen neuen Knoten zuweise, bekomme ich eine NullPointerException.
Also:
public void add(Car auto){
start.next = new Knoten(auto); // erzeugt NullPointerException
}
Aber ich möchte doch hier in den Start-Knoten einen neuen Knoten setzen, der im Daten-Teil das Car-Objekt bestitzt.
HAVE PHUN!
Source code |
|
1 2 3 |
public void add(Car auto){ start.next() = new Knoten(auto); // erzeugt NullPointerException } |
This post has been edited 1 times, last edit by "Neo" (Jun 28th 2007, 1:41pm)
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Bestimmt nicht. Methoden kann man in Java keinen Wert zuweisen.Quoted
Original von Neo
Vielleicht meinst du
Source code
1 2 3 public void add(Car auto){ start.next() = new Knoten(auto); // erzeugt NullPointerException }