У меня есть некоторые проблемы в сравнении между двумя объектами - PullRequest
0 голосов
/ 06 мая 2011

Так что недавно я работал над проектом "телефонная книга", который использует "Дерево двоичного поиска".

Телефонная книга использует BSTree.Каждый узел дерева является BTNode.В основном классе я заменяю E классом Pair, который имеет (имя строки, номер строки), когда я определяю узлы.

У меня есть следующий класс компаратора для сравнения между двумя типами 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 () в классе Pair:

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

Теперь, когда я запускаю программу, и она приходитдля компаратора, это дает мне ошибки в компараторе, потому что теперь он сравнивает две пары

Как я могу решить эту проблему?Что я хочу, чтобы сравнить между именами двух пар?

Эта ошибка, которую я получил после вставки второго узла (Pair) в 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)

Кстати, я объявил BTNodeComparatorв BSTree следующим образом:

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

Заранее благодарен за любую помощь:)

1 Ответ

3 голосов
/ 06 мая 2011

Ваша трассировка стека указывает, что ваша проблема в том, что имя равно нулю в паре.

.. или пара, которая является аргументом для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...