| Autor |
Nachricht |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
10:45:46 12.04.2012 Titel: |
Einfügeoption einer linearen Liste |
Zitieren |
Hallo zusammen,
ich möchte in Java eine lineare Liste implementieren. Dabei hat jedes Element der Liste eine Referenz auf das nachfolgende Element und einen eigenen Wert. Bis jetzt funktioniert alles auch prima, außer die Methode, die ein Element an einer bestimmten Position einfügt. Ich bekomme immer eine NullPointer - Exception, aber sehe keinen Weg, sie zu umgehen. Hier ist der Code
| Java: | 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 29 | public boolean insertAtPosition (T key, int pos) {
ListItem<T> q = new ListItem<T>(key, null); //neues einzufügendes Element
ListItem<T> p = first; //erstes Element der Liste
if(pos == 0) { //Element wird am Anfang eingefügt
q.next = first;
first = q;
length++; //Listenlänge um eins erhöhen
return true;
}
if(pos > length) //false zurückgeben, wenn an ungültige Position eingefügt werden soll
return false;
int counter = 0;
length++;
while(true){ //bis zu der einzufügenden Stelle gehen
if(counter == pos) { //Stelle gefunden
q.next = p.next; //NullPointerException
p.next = q;
);
return true;
}
counter++;
p = p.next;
}
} | |
Die Zeile "q.next = p.next" erzeugt die Exception. Ich vermute mal, dass es daher kommt, dass ich an das Ende der Liste ein Element einfügen möchte. Somit ist "p.next" null. Aber das hat schon seine Richtigkeit, weil eben kein weiteres Objekt folgt .
Könnt ihr mir helfen, meinen Code zum Laufen zu bringen?
Vielen Dank
LG, freakC++ |
|
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
10:53:55 12.04.2012 Titel: |
|
Zitieren |
Durch ein bisschen Debugging hab ich den Fehler gefunden. In der Schleife muss die if-Bedingung natürlich "if(counter == pos-1)" heißen. Das ist aber irgendwie nicht so schön...
Angenommen ich habe die Liste 0 1 2 3 4 5 6 7 8 9 und ich möchte an die vierte Stelle 99 einfügen, dann sieht das Ergebnis so aus:
0 1 2 3 4 99 5 6 7 8 9.
Es wird also an die fünfte Stelle eingefügt. Das liegt daran, dass wir eben bei 0 anfangen zu zählen. Meine Frage ist nun, ob das immer so ist? Ich dachte, dass bei Enfügeoptionen man meist von 1 anfängt zu zählen und hier das Ergebnis also
0 1 2 3 99 4 5 6 7 8 9
lauten sollte. Wie ist der Standard?
Vielen Dank
LG, freakC++
LG, freakC++ |
Zuletzt bearbeitet von freakC++ am 10:57:43 12.04.2012, insgesamt 1-mal bearbeitet |
|
 |
knivil
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.02.2009
Beiträge: 6001
|
knivil Mitglied
14:22:15 12.04.2012 Titel: |
|
Zitieren |
Nur so fuer mein Verstaendnis: Was ist eine nicht-lineare Liste? |
_________________ If it were not for laughter, there would be no Tao.
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
14:45:17 12.04.2012 Titel: |
|
Zitieren |
z.B. ein Baum.
Fängt man hier auch normwalerweise bei 0 an zu zählen?
Vielen Dank |
|
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
14:48:55 12.04.2012 Titel: |
|
Zitieren |
Da man auch bei ArrayList, Vector, HashMap etc. bei 0 anfängt zu zählen, gehe ich von der Richtigkeit meines Codes aus
LG, freakC++ |
|
|
|
 |
JFB
Unregistrierter
|
JFB Unregistrierter
17:09:03 12.04.2012 Titel: |
|
Zitieren |
@freakC++: Eigentlich wird es meistens andersrum gesehen, d.h. eine Liste ist ein spezieller ("linearer") Baum, nicht umgekehrt. |
|
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
19:15:00 12.04.2012 Titel: |
|
Zitieren |
ohh...ok! Das wusste ich nicht. Da habe ich es wohl andersherum gerlernt |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|