Java Iterator双链表

时间:2015-05-05 08:18:12

标签: java nullpointerexception doubly-linked-list deque

您好我是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;}
            }

3 个答案:

答案 0 :(得分:3)

我做了两处修改。

  1. 正如图库西已经说过的,增量指数。
  2. 从头开始播放电流,而不是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”。

但如果它已经在使用索引没有问题那么。