Здравствуйте.
Недавно начал изучать Java, помогите пожалуйста разобраться почему вылетает NPE. Пытаюсь удалить узел в односвязном списке по значению.
public boolean delElementByValue(E value) {
Node<E> resultNode = firstNode;
while (resultNode != null) {
//NullPointerException в следующей строке
if (resultNode.getNodeValue().equals(value)) {
resultNode.getPrevNode().setNextNode(resultNode.getNextNode());
return true;
}
resultNode = resultNode.getNextNode();
}
return false;
}
Класс Node:
class Node<E> {
private Node<E> prevNode;
private Node<E> nextNode;
private E nodeValue;
Node(Node<E> prevNode, Node<E> nextNode, E nodeValue) {
this.prevNode = prevNode;
this.nextNode = nextNode;
this.nodeValue = nodeValue;
}
public void setNodeValue(E nodeValue) {
this.nodeValue = nodeValue;
}
public void setPrevNode(Node<E> prevNode) {
this.prevNode = prevNode;
}
public void setNextNode(Node<E> nextNode) {
this.nextNode = nextNode;
}
public Node<E> getPrevNode() {
return prevNode;
}
public Node<E> getNextNode() {
return nextNode;
}
public E getNodeValue() {
return nodeValue;
}
}
Смотрел в отладке. Цикл проходит 4 итерации и падает, в то время как value стоит на 10+ позиции. Что - то мне подсказывает что ошибка какая - то "детская", но догнать уже долгое время не могу. Заранее спасибо.
Когда вы удаляете Node
, тогда метод resultNode.getNodeValue()
будет возвращать null
, а у него в свою очередь нет метода equals
. Попытка его вызова вернет NullPointerException
.
После того, как вы удаляете Node
, текущую Node
нужно смещать на следующую Node
, а не оставлять на удаленной.
resultNode = resultNode.getNextNode();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Фото лежит в MS SQL в поле типа IMAGEНужно передать его в MySQL в поле типа BLOB
Будет ли считаться правильным, если у дочерних таблиц будет такой же id, как и у родительской? (Внешние ключи будут совпадать)
У меня есть программа которая время от времени выполняет разные командыЗа вызов этих команд отвечает 1 класс(sender), а выполнять их должен другой(handler)
У меня есть файл с int числом в немЗначит в памяти этот файл занимает 4 байта