2017-05-11 1 views
2

Toute aide sur la question suivante serait grandement appréciée.NullPointerException ajouter des données à BST

Je suis un BST qui la mise en œuvre a 3 classes: BST, BSTNode et Profil.

BST classe

public class BST { 

    private static BSTNode root; 
    private BSTNode parent; 

    BST() { 
     root = null; 
    } 

    public void insertProfile(Profile p) { 

     BSTNode newNode = new BSTNode(p); 

     if (root == null) { 
      root = newNode; 
     } else { 
      BSTNode focusNode = root; 

      BSTNode parent = null; 
      int compare = focusNode.getProfile().getName().compareTo(parent.getProfile().getName()); 
      while (true) { 
       parent = focusNode; 
       if (compare < 0) { 
        focusNode = focusNode.left; 
        if (focusNode == null) { 
         parent.left = newNode; 
         return; 
        } else { 
         focusNode = focusNode.right; 
         if (focusNode == null) { 
          parent.right = newNode; 
          return; 
         } 
        } 
       } 
      } 
     } 

    } 


} 

Quand j'ajouter une entrée à la BST, il semble fonctionner très bien, mais quand j'ajoute deux ou plusieurs entrées à la BST, il me donne cette erreur:

Exception in thread "main" java.lang.NullPointerException 
    at BST.insertProfile(BST.java:21) 
    at BSTMain.main(BSTMain.java:19) 

J'ai essayé de résoudre ce pendant plusieurs heures, si quelqu'un pouvait allusion où je me trompe, serait très apprécié.

Merci

+1

icate de [Qu'est-ce qu'une exception NullPointerException, et comment puis-je la réparer?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – avojak

Répondre

0

Il est à cause de ce code (en BST.java, juste après la déclaration else dans insertProfile:

BSTNode parent = null; 
int compare = focusNode.getProfile().getName().compareTo(parent.getProfile().getName()); 

Ce que vous faites est de déclarer que parent est null, mais appeler un méthode (getProfile) sur elle, qui est à l'origine de la NullPointerException. Vous devez d'abord instancier parent

+0

Merci beaucoup! Si je change aussi: BSTNode parent = new BSTNode (p); ça marcherait? –

+0

Vous devrez apporter d'autres modifications pour que votre code fonctionne; par exemple, l'instruction 'else' dans votre boucle' while' est mal placée (elle devrait être après la première déclaration 'if', mais plutôt après la seconde). De plus, vous voulez déplacer l'instruction où vous évaluez 'compare' dans la boucle' while', afin que la boucle puisse se terminer. Quelque chose qui m'aide est (physiquement) en train d'extraire chaque étape du processus et de voir comment je le coderais; vous pourriez être en mesure de voir quelques-unes des autres erreurs faites dans la boucle 'while' de cette façon. –

+0

Merci beaucoup! –