2011-05-06 48 views
0

所以最近我一直在研究使用「二叉搜索樹」的「電話簿」項目。我在兩個對象之間的比較中遇到了一些問題

電話簿使用BSTree。樹的每個節點都是BTNode。在主類中,當我定義節點時,我用Pair類取代E,它具有(String name,String number)。

我有以下的比較級2 E型產品之間進行比較:

import java.util.Comparator; 
public class BTNodeComparator<E extends Comparable<E>> implements Comparator<E> 
{ 
    public int compare(final E a, final E b) 
    { 
     return (a.compareTo(b)); 
    } 
} 

,我用它BSTree。

而且,我在對類中定義的compareTo()方法:

@Override 
    public int compareTo(Pair pair) 
    { 
     return name.compareTo(pair.getName()); 
    } 

現在,當我運行該程序,並涉及到比較器,它給了我錯誤的比較,因爲現在兩者之間的比較對

我該如何解決這個問題?我想要比較兩對的名字?

這個錯誤我在BST插入第二個節點(對)之後的了:

java.lang.NullPointerException 
    at Pair.compareTo(Pair.java:36) // @ return name.compareTo(pair.getName()); 
    at Pair.compareTo(Pair.java:2) // @ public class Pair implements Comparable<Pair> 
    at BTNodeComparator.compare(BTNodeComparator.java:24) // @ return (a.compareTo(b)); 
    at BTNodeComparator.compare(BTNodeComparator.java:20) // @ public class BTNodeComparator<E extends Comparable<E>> implements Comparator<E> 
    at BSTree.search(BSTree.java:285) 
    at BSTree.insert(BSTree.java:300) 
    at PhoneBook.main(PhoneBook.java:25) 

BTW,我在BSTree decleared BTNodeComparator如下:提前

protected Comparator<E> c = new BTNodeComparator(); 
if (c.compare(target, cursor.getElement()) < 0) cursor = cursor.getLeft(); 

感謝您的幫助:)

回答

3

您的堆棧跟蹤表明您的問題是該名稱在一個對爲空。

..或配對是一個參數比較去

+0

好吧然後,我該如何解決這個問題? – 2011-05-06 14:38:57

+0

通過始終給所有對中的名稱。首先確認名稱是問題。在比較方法中打印兩個名稱。 – Kaj 2011-05-06 15:07:10

+0

哦,你是對的。他們都是空的。那我該怎麼辦? – 2011-05-06 15:11:46