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();
感謝您的幫助:)
好吧然後,我該如何解決這個問題? – 2011-05-06 14:38:57
通過始終給所有對中的名稱。首先確認名稱是問題。在比較方法中打印兩個名稱。 – Kaj 2011-05-06 15:07:10
哦,你是對的。他們都是空的。那我該怎麼辦? – 2011-05-06 15:11:46