我在比较两个对象时遇到了一些问题

时间:2011-05-06 14:03:27

标签: java compare

所以最近我一直致力于使用“二元搜索树”的“电话簿”项目。

电话簿正在使用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();

提前感谢您的任何帮助:)

1 个答案:

答案 0 :(得分:3)

您的堆栈跟踪表明您的问题是对中的名称为空。

..或者是compareTo

的参数