Null Pointer Exception

brauni18

Mitglied
Hallo,
ich wollte bisschen mit "Pointern in Java" rumexperimentieren und hab versucht mir ne einfach verkettete Liste zu bauen.
Jetzt komm ich aber nicht weiter weil ich immer ne Null Pointer Exception bekomme.
Hab versucht mich bisschen zu belesen...aber ich check nicht was die null pointer exception ist und kann deswegen auch meinen fehler nicht beheben

hier mein Code:

Java:
class Pointer{
    String Inhalt;
    Pointer next;

    Pointer(){
        next=null;
        Inhalt="";
    }

}

public class Liste {
    private Pointer erstes,akt,letztes = new Pointer();

    Liste(){
        erstes=null;
        letztes=null;
        akt=null;
    }

    private boolean leer(){
        return erstes.next==null;
    }

    private Pointer getVoriges(){
        Pointer Temp = new Pointer(); // Temporärer Such-Pointer
        Temp=erstes;
        while(Temp.next!=akt) {
            Temp=Temp.next;
        }
        return Temp;
    }

    public void insert(String content){
        Pointer Neues = new Pointer();
        Neues.Inhalt=content;
        if (leer() ) {
            Neues.next=null;
            erstes=Neues;
            letztes=Neues;
            akt=Neues;
        }
        else{
            if(akt==erstes) {
                Neues.next=akt;
                erstes=Neues;
                akt=Neues;
            }
            else {
                Pointer Prev = new Pointer();
                Prev=getVoriges();
                Prev.next=Neues;
                Neues.next=akt;
                akt=Neues;
            }

        }

    }

    public void Ausgabe(){
        akt=erstes;
        //System.out.println(letztes.Inhalt);
        do{
            System.out.println(akt.Inhalt);
            akt=akt.next;
        }
        while(akt!=letztes);
    }
}

und die anwendende Main:

Java:
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Liste l1 = new Liste();
        l1.insert("Hallo");
        l1.insert("Welt");
        l1.Ausgabe();
    }

}
 
Hab versucht mich bisschen zu belesen...aber ich check nicht was die null pointer exception ist und kann deswegen auch meinen fehler nicht beheben

Dann lies dir mal folgendes durch:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.7 Identität und Gleichheit


Java:
erstes = null;
hinter erstes versteckt sich also kein Objekt...in der Methode insert rufst du jetzt aber [c]if (leer())[/c] auf, also die Methode leer()..dort passiert wiederum [c]erstes.next[/c] <-- da kracht es. Du versuchst auf die Eigenschaft next zuzugreifen. erstes ist aber [c]null[/c].

Mit dem Durchlesen des o.g. Artikels, kommst du hoffentlich weiter....
 
jop erstes ist null.

Du sagst zwar:

Java:
private Pointer erstes,akt,letztes = new Pointer();


aber dann im Konstruktor

Java:
Liste()
{
      erstes=null;
      letztes=null;
      akt=null;
}


Zuerst werden also zu den drei Variablen je eine neue Pointer Instanz zugewiesen.
Der Konstruktor wird allerdings erst danach aufgerufen und setzt die Variablen wieder auf null...
 
Noch so als kleiner Tipp:

Ich finde es gefährlich sowas zu schreiben, weil erstes und akt 'null' bleiben und nur letztes nachher nicht mehr 'null' ist.
[Java]
private Pointer erstes,akt,letztes = new Pointer();
[/Java]

Besser so:
[Java]
private Pointer erstes = new Pointer();
private Pointer akt = null;
private Pointer letztes = null;
[/Java]

oder wenn du alle initialisieren möchtest:
[Java]
private Pointer erstes = new Pointer();
private Pointer akt = new Pointer();
private Pointer letztes = new Pointer();
[/Java]
 
oder wenn du alle initialisieren möchtest:
[Java]
private Pointer erstes = new Pointer();
private Pointer akt = new Pointer();
private Pointer letztes = new Pointer();
[/Java]

Sinnvoller wäre da IMHO
[Java]
private Pointer erstes = new Pointer();
private Pointer akt = erstes;
private Pointer letztes = erstes;
[/Java]
(muss man natürlich in der Liste berücksichtigen...)
 
erstmal Danke für eure Antworten =)

sind schon einige sachen die man aus anderen sprachen vll anders kennt


ähm...aber mit dem nullen von den Pointern erstes, akt und letztes......ich dachte dass ich die nulle ist egal weil wenn ich dann ein neues Element einfüg bekommen die Pointer doch die Referenz des Neuen Pointers übergeben oder?

habs jetzt wie folgt geändert:
Java:
class Pointer{
    String Inhalt;
    Pointer next;

    Pointer(){
        next=null;
        Inhalt="";
    }

}

public class Liste {
    private Pointer erstes = new Pointer();
    private Pointer akt = new Pointer();
    private Pointer letztes = new Pointer();

    Liste(){
        erstes=null;
        letztes=null;
        akt=null;
    }

    private boolean leer(){
       if(erstes==null){
           System.out.println("ist leer");
           return true ;
       } else return false;
    }

    private Pointer getVoriges(){
        Pointer Temp = new Pointer(); // Temporärer Such-Pointer
        Temp=erstes;
        while(Temp.next!=akt) {
            Temp=Temp.next;
        }
        return Temp;
    }

    public void insert(String content){
        Pointer Neues = new Pointer();
        Neues.Inhalt=content;
        if (leer() ) {
            Neues.next=null;
            erstes=Neues;
            letztes=Neues;
            akt=Neues;
        }
        else{
            if(akt==erstes) {
                Neues.next=akt;
                erstes=Neues;
                akt=Neues;
            }
            else {
                Pointer Prev = new Pointer();
                Prev=getVoriges();
                Prev.next=Neues;
                Neues.next=akt;
                akt=Neues;
            }

        }

    }

    public void Ausgabe(){
        akt=erstes;
        //System.out.println(akt+"  "+erstes+"  "+letztes);
        while(akt!=letztes) {
            System.out.println(akt.Inhalt);
            akt=akt.next;
        } 
        
    }
}
 

Zurück
Oben