2015-11-22 3 views
0

Я пытаюсь реализовать общую кучу. Чтобы вставить данные, я должен сравнить массив для позиции. Когда у меня было это, как только целые числа я был в состоянии использовать этуСравнение общих элементов

while (heap[getParent(currentItem)] > heap[currentItem]) { 

Преобразование в Дженерики я исследовал и попытался это:

while (heap[getParent(currentItem)].compareTo(heap[currentItem]) < 0) { 

Это была неудачной, поскольку это дает NullPointerException. Как я могу преобразовать код для правильного сравнения элементов?

+3

[Как исправить исключение NullPointerException] (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – markspace

+0

Я понимаю исключение NullPointerException, но я пока не понимаю, как преобразовать мой начальный цикл while в один, который будет сравнивать Generics, заставляющий меня получить исключение NullPointerException. Ссылка, которую вы указали, ничего не связана с сопоставлением дженериков. –

+0

И дженерики не имеют никакого отношения к ответу. Это просто исключение нулевого указателя. Вы исправляете это так же, как и любое другое: не храните нули в массиве. – markspace

ответ

0

Вам необходимо использовать общий тип, который расширяет компаратор, например <T extends Comparable<T>>, а не только <T>. Затем вы сможете сравнить элементы, используя метод compareTo. Если вы получаете исключение нулевого указателя, то вам нужно убедиться, что объект, который вы пытаетесь вызвать compareTo, не должен быть пустым. В вашем случае это будет heap[getParent(currentItem)]. Я бы предложил хранить heap[getParent(currentItem)] в поле и уверен, что он не является нулевым.

Смежные вопросы