迭代器 - 空指针异常错误

时间:2013-05-17 07:12:32

标签: java iterator nullpointerexception

我有一个非常令人沮丧的问题:

我正在尝试运行一个迭代器,但它继续在hasNext类中提出java.lang.NullPointerException。

我不太确定尝试使用空值的位置。我假设它与当前有关。我添加了一个if语句来检查current是否为null。但随后它又回归并带来意想不到的价值。

帮助表示赞赏。

以下代码:

private class Iterator implements Iterator
{
    private Link<T> current;

    public boolean hasNext () { 
        if(current.next == null)
            return false;
        return true;
    }

    public T next() throws OutOfBounds
    {
        if (this.hasNext())
        {
            T element = current.element;
            current = current.next;
            return element;
        }
        else 
            throw new OutOfBounds("No next element to call");
    }
}

private class Link<T> 
{
    private T       element;
    private int     priority;
    private Link<T> next;

    public Link(T t, int p, Link<T> n) 
    {
        this.element = t;
        this.priority = p;
        this.next = n;
    }
}

}

3 个答案:

答案 0 :(得分:5)

您可能没有初始化current,因此在检查hasNext null方法中的检查应该将currnetcurrent.next进行比较>

修改支票

if(current.next == null)

为:

if(current == null || current.next == null)

或者将您的方法修改为:

public boolean hasNext () { 
   return (current != null && current.next != null);
}

答案 1 :(得分:1)

尝试更新您的hasNext,如下所示:

public boolean hasNext () { 
        if(current == null) {
           System.out.println("current is null");
           return false;
        } else if(current.next == null)
            return false;
        }
        return true;
    }

答案 2 :(得分:1)

您可以在while块内两次使用iterator.next()。 通过iterator.next()创建新对象,然后使用它。

这是使用它的正确方法

        function get_current_time($user_login, $user) {
        $time =  time();
        update_user_meta( $user->ID, '_last_login', $time );
        $current_login = get_user_meta( $user->ID, '_last_login', true );
        $the_currentlogin_date = date('M j, Y h:i a', $current_login);
        return $the_currentlogin_date;

        }
        add_action('wp_login', 'get_current_time', 10, 2);