Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Java中创建deque时出现Nullpointer异常_Java_Nullpointerexception_Deque_Doubly Linked List - Fatal编程技术网

尝试在Java中创建deque时出现Nullpointer异常

尝试在Java中创建deque时出现Nullpointer异常,java,nullpointerexception,deque,doubly-linked-list,Java,Nullpointerexception,Deque,Doubly Linked List,我一直在尝试用Java创建一个deque,但是当我添加一个新节点时,我得到了一个nullpointer异常。以下是我用于双链接列表的帮助器类: private class Node { private Item item; private Node next; private Node prev; } 然后,我将节点添加到列表的开头,如下所示: public void addFirst(Item item) { Node oldfirst = first

我一直在尝试用Java创建一个deque,但是当我添加一个新节点时,我得到了一个nullpointer异常。以下是我用于双链接列表的帮助器类:

private class Node {
    private Item item;
    private Node next;
    private Node prev;
}
然后,我将节点添加到列表的开头,如下所示:

    public void addFirst(Item item) {
    Node oldfirst = first;
    first = new Node();      
    first.prev = null;
    first.item = item;
    first.next = oldfirst;
    oldfirst.prev = first;        
    N++;
}
我得到了
oldfirst.prev=first的
NullPointer
异常行。此外,当我编译代码时,我得到以下警告:

警告:从未在本地读取字段Deque2.Node.prev


我可能做错了什么?

异常意味着
oldfirst
为空。您将其初始化为
节点oldfirst=first
,这意味着
first
为空。

我猜当您的数据为空时,
first
为空。然后,当您将
first
分配到
oldFirst
中时,这会使
oldFirst
为空,因此尝试访问
prev
会产生NPE。将访问权限更改为:

if (oldFirst != null)
    oldfirst.prev = first;
你应该把它修好


您的警告可能只是因为您没有经常使用
prev
,而您只是在设置它。有趣的事实:使用deque,您不需要双链接列表,因此您的
prev
变量不太可能被使用。如果您还想支持在路上使用您的deque进行排队(类似于实现
deque
Queue
),那么您需要保持
prev

如果您的deque为空,那么
first
可能为空,因此
oldfirst
也将为空。
Node oldfirst=first首先是什么
?再次感谢。这是有道理的。谢谢大家。