У меня есть некоторая проблема при сравнении между двумя объектами

#java #compare

#java #Сравнить

Вопрос:

Итак, недавно я работал над проектом «телефонная книга», который использует «Бинарное дерево поиска».

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

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

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

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

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

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

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

Комментарии:

1. Всегда указывая имя во всех парах. Сначала убедитесь, что проблема в названии. Выведите оба имени в методе сравнения.

2. моя ошибка, я неправильно определяю пару calss. Проблема решена. Спасибо!