У меня возникли проблемы с NPE в классе MyLinkedList, который расширяет AbstractList. Я начинаю с этих конструкторов:
Конструктор для закрытого класса Node:
public Node(T nodeData, Node<T> nodePrev, Node<T> nodeNext)
{
this.data = nodeData;
this.prev = nodePrev;
this.next = nodeNext;
}
Конструктор класса MyLinkedList.
MyLinkedList()
{
this.head = new Node<T>(null, null, null);
this.tail = new Node<T>(null, null, null);
this.size = 0;
}
MyLinkedList(Node<T> head, Node<T> tail, int size)
{
this.head = head;
this.tail = tail;
this.size = size;
}
и здесь я пытаюсь вернуть узел по индексу с помощью этого метода:
private Node<T> getNth(int index)
{
Node<T> temp;
if(index < 0 || index > size)
throw new IndexOutOfBoundsException();
if(index < this.size() / 2)
{
temp = this.head;
for(int i = 0; i < index; i++)
{
temp = temp.getNext();
}
}
else
{
temp = this.tail;
for(int i = this.size(); i > index; i--)
{
temp = temp.getPrev();
}
}
return temp;
}
Я думаю, что основная проблема связана с инициализацией головы и хвоста как null, но я не уверен, что это проблема, и если да, то как ее исправить. Есть ли лучший способ инициализировать эти узлы, чтобы избежать NPE?
index > size
следует сделатьindex >= size
, потому что вы начинаете индексацию сzero
- person user1406062   schedule 07.10.2012size
и останавливается наindex + 1
вместо того, чтобы начинать сsize - 1
и останавливаться наindex
. - person Fritz   schedule 07.10.2012