UPD:This post根本没有帮助。我的问题不是什么是NullPointerException。我盼望有人会告诉我,我在Iterator课程中缺少什么,所以它得到了一个空参考。我想你应该解开我的问题所以我可以回答我的问题。
我决定在没有任何java内置类或接口的情况下自己实现单向链表。首先,我创建了MyList和Nodes类,并为MyList实现了一些功能,例如:将新元素添加到列表末尾,删除一些元素,检查,列表是否包含某些元素等等。它工作得很好,你可以看到整个项目here。
之后我想我会需要迭代器来查看列表。所以,我写了这堂课:
public class Iterator<T> {
private Node currentValue;
private MyList list;
public Iterator(MyList list)
{
this.list = list;
this.currentValue = null;
}
public T next()
{
if (!list.isEmpty())
{
if (currentValue == null) currentValue = list.head;
else currentValue = currentValue.next;
return (T) currentValue.value;
}
return null;
}
public boolean hasNext()
{
if (currentValue.next.equals(null)) return false;
return true;
}
}
我认为Node的代码在这里很有用:
public class Node<T> {
public T value;
public Node next;
public Node(T value)
{
this.value = value;
}
}
然后,我做了一个执行该程序的课程:
public class ExecutiveClass {
public static void main(String[] args)
{
MyList<Integer> list = new MyList<Integer>();
list.add(5);
list.add(10);
list.add(15);
list.add(20);
list.add(60);
System.out.println(list.containts(10));
System.out.println(list.containts(50));
Iterator iterator = new Iterator(list);
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
}
}
似乎我的迭代器无法正常工作,因为我已将此输出:
true
Exception in thread "main" java.lang.NullPointerException
false
at com.my.list.model.Iterator.hasNext(Iterator.java:40)
at com.my.list.engine.ExecutiveClass.main(ExecutiveClass.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Process finished with exit code 1
那么,我如何修复Iterator,它会按预期工作?