所以最近我一直致力于使用“二元搜索树”的“电话簿”项目。
电话簿正在使用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中使用它。
另外,我在Pair类中定义了compareTo()方法:
@Override
public int compareTo(Pair pair)
{
return name.compareTo(pair.getName());
}
现在,当我运行程序并进入比较器时,它会给我比较器的错误,因为现在它在两个对之间进行比较
我该如何解决这个问题?我想要的是比较两对的名字吗?
在BST中插入第二个节点(Pair)后得到的错误:
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中删除了BTNodeComparator如下:
protected Comparator<E> c = new BTNodeComparator();
if (c.compare(target, cursor.getElement()) < 0) cursor = cursor.getLeft();
提前感谢您的任何帮助:)
答案 0 :(得分:3)
您的堆栈跟踪表明您的问题是对中的名称为空。
..或者是compareTo
的参数