#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. Проблема решена. Спасибо!