Java:无法正确实现自定义迭代器

时间:2016-03-09 13:10:11

标签: java

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,它会按预期工作?

0 个答案:

没有答案