2014-05-22 27 views
0

我已經創建了BinarySearch樹,並且在插入鍵和值時遇到了問題。 它說NullPointerException。BinarySearch樹

package BST; 

public class Tree 
{ 
    public Node root = null; 

    public void insert(int key, Object obj) 
    { 
     Entry entry = new Entry(key,obj); 
     if(this.root==null) 
     { 
      this.root = new Node(entry, null); 
     } 
     else 
     { 
      insert(entry,this.root); //error 
     } 
    } 
    public void insert(Entry entry, Node temp) 
    { 
     if(((Entry) temp.getObj()).getKey() > entry.getKey()) //error 
     { 
      if(temp.isLeft()) 
       insert(entry, temp.childLeft()); 
      else 
       temp.addLeft(entry); 
     } 
     else 
     { 
      if(temp.isRight()) 
       insert(entry, temp.childRight()); 
      else 
       temp.addRight(entry); 
     } 
    }//insert 

    public void inorderT() 
    { 
     inorderT(this.root); 
    } 
    private void inorderT(Node t) 
    { 
     if(t.isLeft()) 
      this.inorderT(t.childLeft()); 
     ((Entry)t.getObj()).printEntry(); 
     if(t.isRight()) 
      this.inorderT(t.childRight()); 
    } 

    public void find(int key) 
    { 
     System.out.println("키 값이" + key + " 인 엔트리 출력하기"); 
     find(key,root); 
    } 
    private void find(int key, Node temp) 
    { 
     Entry entry = ((Entry)temp.getObj()); 

     if(entry.getKey()==key) 
     { 
      entry.printEntry(); 
      return; 
     } 
     if(temp.isLeaf()) 
     { 
      System.out.println("찾기 실패"); 
      return; 
     } 

     if(entry.getKey()==key) 
     { 
      find(key, temp.childLeft()); 
     } 
     else 
     { 
      find(key, temp.childRight()); 
     } 
    } 
} 

是說//錯誤 是我有問題的句子。 我完全不知道爲什麼它不起作用 順便說一句,我是如此新手在Java語言。所以,不要怪我,如果這是一個愚蠢的問題:)

+0

我會斷點你的調試器中的代碼行,看看哪個表達式爲空,並試圖找出原因。我也會嘗試找到最簡單的測試,在這種情況下,可以更輕鬆地找出出現此錯誤的原因。 –

+3

你知道什麼是空指針異常嗎? –

+0

您在上面的代碼中遇到錯誤的行號? – Ketan

回答

0

更換

if(((Entry) temp.getObj()).getKey() > entry.getKey()) //error 

if(temp.getObj())!=null && temp.getObj()).getKey()!=null && ((Entry) temp.getObj()).getKey() > entry.getKey()) //solution 
0

在方法公共無效插入(INT鍵,obj對象)如果根爲空你正在創建

this.root = new Node(entry, null); 

然後如果你通過這個.root到公共無效插入(進入入口,臨時節點)您可以在您標記爲錯誤行遇到的NullPointerException,因爲temp.getObj() 返回null,然後你企圖調用信息getKey()上的空目的。