您好我是Java的新手,并尝试通过实现双链表格式来创建Deque
类。当我运行代码(DequeApp)时,我得到一个NullPointerException
,请回到我的Iterator.next(Deque.java:44)。
Error messages: **Exception in thread "main" java.lang.NullPointerException
at dlist.Deque$DoubleListIterator.next(Deque.java:44)
public E next() {
if (!hasNext()) {throw new NoSuchElementException();}
else{
E temp = current.item;
current = current.next;
return temp;}
}
答案 0 :(得分:3)
我做了两处修改。
从头开始播放电流,而不是head.next。
private class DoubleListIterator implements Iterator<E> {
// instance variable
private Node current = head;
private int index = 0;
public boolean hasNext() {
return index < N;
}
public E next() {
if (!hasNext()) {
throw new NoSuchElementException();
} else {
index++;
E temp = current.item;
current = current.next;
return temp;
}
}
public void remove() {
throw new UnsupportedOperationException();
}
}
答案 1 :(得分:2)
您忘了在plugins {
compile ":spring-security-core:1.2.7.3"
compile ":jasper:1.6.1"
compile ":mail:1.0.1"
compile ":executor:0.3"
compile ":jcaptcha:1.2.1"
build ":tomcat:$grailsVersion"
runtime ":hibernate:$grailsVersion"
runtime ":jquery:1.8.3"
}
中增加index
个计数器。你写道:
DoubleListIterator
你应该写:
public E next() {
if (!hasNext()) {
throw new NoSuchElementException();
} else {
E temp = current.item;
current = current.next;
return temp;
}
}
另请注意,我已将缩进格式更改为Oracle指南的格式。
第二个错误是您按如下方式初始化Iterator:
public E next() {
if (!hasNext()) {
throw new NoSuchElementException();
} else {
index ++; // <---- without this, hasNext() always returns true
E temp = current.item;
current = current.next;
return temp;
}
}
但是,这使得无法检索 private Node current=head.next;
(因为您已经指向其head
节点)。它使你逐个索引计数器。更正后的代码:
next
答案 2 :(得分:0)
使用索引变量的另一个选择是
也许你可以在hasNext中尝试“current.next!= null”。
但如果它已经在使用索引没有问题那么。