NullPointerException lösen

Lunarix94

Mitglied
Huhu,
nachdem mir gestern klasse hier geholfen wurde, ist heut eine neue Frage aufgekommen. Ich hoffe ihr könnt mir wieder helfen.

Meine Methode:
Java:
public class Tree {
  private Node wurzel = null;
  public boolean isEmpty() {
   return wurzel == null;
  }
  public void insert(int x) {
    if (isEmpty())
      wurzel = new Node(x);
    else
      if (x <= wurzel.wert)
        wurzel.links.insert(x);
      else
        wurzel.rechts.insert(x);
  }

  public String toString() {
    if (isEmpty())
      return ":";
    else
      return "|"+wurzel.wert+
      wurzel.links+wurzel.rechts+"";
  }

  public int wertt(){
    if (isEmpty()){
     return 0;
    }
    return wurzel.wert;
  }
  public boolean verschieden(){
    if (isEmpty()){
    }
    if(wurzel.wert == wurzel.rechts.wertt() || wurzel.wert == wurzel.links.wertt()){
      return false;
    }
    wurzel.rechts.verschieden();
    wurzel.links.verschieden();
    return true;
  }


Die main dazu:
Java:
class main{
  public static void main (String[] args){
    Tree t = new Tree();
    t.insert(5); t.insert(6); t.insert(6);
    t.insert(3); t.insert(2); t.insert(6);

    System.out.println(t.verschieden());
  }
}

Ziel ist es mit verschieden() zu schauen ob das Kind im Baum den gleichen Wert hat wie die aktuelle Wurzel. Das wollte ich rekursiv machen, also jede Wurzel dann die 2 Kinder durchgehen und wieder schauen. Aber bei dem
Java:
    wurzel.rechts.verschieden();
    wurzel.links.verschieden();
scheint er nicht zu wollen. Es gibt eine NullPointerExeption.

Kann jemand helfen?
Danke
 
Java:
  public boolean verschieden(){
    if (isEmpty()){
    }

Ich nehme an, in der IF-Bedingung sollte eine Abbruchbedingung sein?
 
Java:
  public boolean verschieden(){
    if (isEmpty()){
    }

Ich nehme an, in der IF-Bedingung sollte eine Abbruchbedingung sein?

Die if - Bedingung soll machen, dass wenn die aktuelle Wurzel leer ist, nichts für die gemacht wird und halt mit der nächsten weitergemacht wird(es wird ja zuerst ganz nach rechts gegangen und dann wenn das durch ist nach links).


Fehlermeldung
Java:
 Execption in thread "main" java.lang.NullPointerException
    at Tree.verschieden(Tree.java:83) 
    at Tree.verschieden(Tree.java:86)
    at Tree.verschieden(Tree.java:86)
    at main.main(main.java:12)

at Tree.verschieden(Tree.java:83) ist Zeile "if(wurzel.wert == wurzel.rechts.wertt() || wurzel.wert == wurzel.links.wertt()){"

at Tree.verschieden(Tree.java:86) ist Zeile "wurzel.rechts.verschieden();"

at main.main(main.java:12) ist Zeile "System.out.println(t.verschieden());"



Es sind ein paar unabhängige funktionierende Methoden dazwischen deshalb die hohen Zeilennummern.


PS: Es ist gut möglich das die ganze Methode Käse ist, aber was besseres habe ich in etwa 3 stunden nicht zu Tage gebracht.
 
Zuletzt bearbeitet:
Die if - Bedingung soll machen, dass wenn die aktuelle Wurzel leer ist, nichts für die gemacht wird und halt mit der nächsten weitergemacht wird(es wird ja zuerst ganz nach rechts gegangen und dann wenn das durch ist nach links).

Das habe ich verstanden. Allerdings müsste doch dann im If-Block ein Return-Statement sein oder der Rest des Codes im Else-Block? So prüfst du zwar auf isEmpty, machst aber unabhängig des Ergebnisses weiter.
 
Wenn er gleiche gefunden hat kann er gerne sofort abbrechen, ansonsten halt alles weiterdurchsuchen. wenn es auf einen empty gestoßen ist sind ja (zumindest beim ersten) noch wurzeln über die er noch nicht abgesucht hat... ich weiß nicht wie ich das machen soll
 
Den Ablauf der Methode hast du ja verstanden. Wenn du es dir Schritt für Schritt als "Programmablaufplan" skizzierst, dann sollte die Umsetzung leichter fallen. Kannst du dein Programm mal auf dem Blatt Papier durchlaufen?

Was aktuell unstimmig ist,
- bei der isEmpty musst du die Rekursion entsprechend beenden
- du hast ein Rückgabewert bei verschieden, nutzt ihn aber nicht
 

Neue Themen


Zurück
Oben