Frage von anto0n, 29

sortierte Liste in JAVA mit compareTo HILFE!?

hab eine Warteschlange usw programmiert nun gibt der mir aber nen nullpointerexception raus, kann mir bitte jemand helfen...

sortierliste: public class sortierliste {

private listenelement erster;


public sortierliste (){
    erster= null;
}


public void datenAusgeben () {
    erster.datenAusgeben ();
}


public void sortiertEntfernen (datenelement suchelement){
    erster = erster.sortiertEntfernen(suchelement);
}


public void sortiertEinfügen(datenelement suchelement) {
    erster = erster.sortiertEinfügen(suchelement);
}

}

datenknoten: public class datenknoten extends listenelement {

private listenelement nächster;

private datenelement e;


public datenelement getElement() {
    return e;
}

public datenknoten (datenknoten knoten,datenelement element) {
    e=element;
    nächster=knoten;
}


public void datenAusgeben () {
    System.out.println(getElement());
    nächster.datenAusgeben();
}


public listenelement getNaechster(){
    return nächster;
}
    public listenelement sortiertEinfügen(datenelement suchelement){
    if (e.compareTo(suchelement) < 0){
        nächster = nächster.sortiertEinfügen(suchelement);
        return this;
    } else {
        return new datenknoten (this,suchelement);
    }
}

public listenelement sortiertEntfernen (datenelement suchelement){
    if (e.compareTo(suchelement) == 0){
        return nächster;
    } else {
        if (e.compareTo(suchelement) < 0){ 
            nächster = nächster.sortiertEntfernen(suchelement);
        }
        return this;
    }
}

}

datenelement: public class datenelement implements Comparable {

private datenelement element;

private String beispieltext;

public datenelement(String b) {
    this.beispieltext = b;
}

public int compareTo(datenelement suchelement){
    if (suchelement.getBeispieltext() == null && this.getBeispieltext() == null){
        return 0;
    }
    if (suchelement.getBeispieltext() ==null){
        return -1;
    }
    if (this.getBeispieltext() == null){
        return 1;
    }
    return this.getBeispieltext().compareTo(suchelement.getBeispieltext());
}

public datenelement getElement() {
    return element;
}

public void setElement(datenelement element) {
    this.element = element;
}
public String getBeispieltext() {
    return beispieltext;
}

public void setBeispieltext(String beispieltext) {
    this.beispieltext = beispieltext;
}

}

Expertenantwort
von KnusperPudding, Community-Experte für Java, 15

Zuerst mal muss ich leider meckern: Klassen schreibt man Groß! Variablen klein! - Sonst wird der Code extrem unleserlich wie bei dir! 

Zu deinem Problem: Eine Nullpointer-Exception heißt, dass du auf ein Objekt noch keinen Wert besitzt und darauf zugegriffen werden soll, was die Ausnahme auslöst.

Ohne jetzt deinen Code nachgebaut zu haben, vermute ich bereits einige Stellen die dafür verantwortlich sein können:

innerhalb deiner compareTo() Methode hast du folgende Zeile:

if (suchelement.getBeispieltext() ==null){
wenn nun aber die Variable "suchelement" null ist, was durchaus passieren kann! - dann läuft der aufruf von "getBeispieltext" zwangsläufig auf einen Fehler. Du fängst ab ob .getBeispielText() eventuell null ist, aber nicht ob das Objekt selbst null ist.
Kommentar von anto0n ,

sry für die schreibweise, und du hast natürlich auch recht mit dem dass ich nicht ausgeschlossen habe dass suchelement null sein kann nun ist suchelement siche nicht null, da ich das selber eingebe trotzdem gibt er den Fehler aus...

Kommentar von KnusperPudding ,

Der kleine 'Tadel' sollte nicht im Vordergrund meiner Antwort stehen. Einerseits sollte es dir gegenüber eine Hilfe sein, andererseits wenn du deinen Code auf diese Art veröffentlichst, trägt eine saubere Schreibweise dazu bei, eine vernünftige Antwort zu bekommen. Also fass das nicht böse auf. 

Jetzt gäbe es drei Optionen: 

Option 1:  du nennst die Zeile in der deine Nullpointer-Exception auftritt. 

Option 2: du stellst ein komplett ausführbares Beispiel bereit, z.b. Via Pastebin. sodass man sich das anschauen kann.

Option 3: Du gibst dich mit dem Tipp zufrieden, das via Debugger selbst zu lösen, wodurch du einen Breakpoint auf die Stelle des Fehlers setzen solltest, um dann nachzuvollziehen welches der Objekte denn nun faktisch null ist und wieso es das ist.

Keine passende Antwort gefunden?

Fragen Sie die Community