Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Java ::  Einfügeoption einer linearen Liste     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
freakC++
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
Beitrag 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 :D.

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
Beitrag 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
Beitrag knivil Mitglied 14:22:15 12.04.2012   Titel:              Zitieren

Zitat:
lineare Liste
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
Beitrag 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
Beitrag 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 :D

LG, freakC++
JFB
Unregistrierter




Beitrag 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
Beitrag freakC++ Mitglied 19:15:00 12.04.2012   Titel:              Zitieren

ohh...ok! Das wusste ich nicht. Da habe ich es wohl andersherum gerlernt :D
c++.de :: Java ::  Einfügeoption einer linearen Liste   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.