我是java新手。
以下代码有NullPointerException
,我真的不知道发生了什么。好像我试图访问空指针。但我不知道我在哪里访问空指针。 (如果它是“head”节点部分,我认为我在这段代码中没有使用它的对象槽。)
非常感谢!
class Deque<Base>
{
private class Node
{
private Base object;
private Node right; //point to the front Node
private Node left; //Point to the rear Node
//Constrcutor for Node
private Node(Base object, Node left, Node right)
{
this.object = object;
this.left = left;
this.right = right;
}
}
private Node head;
//Constructor for Deque
public Deque()
{
head = new Node(null,head,head);
}
//--------------------------------------
public void enqueueFront(Base object)
{
head.right = new Node(object, head, head.right);
head.right.right.left = head.right;
//Node temp = head.right;
//temp.left = head.right.right;
}
//--------------------------------------------
public void enqueueRear(Base object)
{
//Node temp = head.left;
head.left = new Node(object, head.left, head);
//temp.right = head.left;
head.left.left.right = head.left;
}
//------------------------------------------------
public Base dequeueFront()
{
if (isEmpty())
{
throw new IllegalStateException();
}
else
{
Base a = head.right.object;
Node temp = head.right.right;
temp.left = head;
head.right = temp;
return a;
}
}
//---------------------------------------------------
public Base dequeueRear()
{
if (isEmpty())
{
throw new IllegalStateException();
}
else
{
Base b = head.left.object;
Node temp = head.left.left;
temp.right = head;
head.left = temp;
return b;
}
}
//----------------------------------------------------
public boolean isEmpty()
{
return ((head.left == head)&&(head.right == head));
}
}
class Driver10
{
public static void main(String [] args)
{
Deque<Integer> a = new Deque<Integer>();
//int temp;
//a.dequeueFront();
a.enqueueFront(2);
//a.enqueueFront(3);
//a.enqueueFront(4);
//a.enqueueRear(6);
//a.enqueueRear(7);
//front: 4,3,2
//rear: 7,6
//temp = a.dequeueRear();
// System.out.println(temp); // 7
//System.out.println(a.dequeueRear()); // 6
//System.out.println(a.dequeueRear()); // 2
//System.out.println(a.dequeueFront()); //4
//System.out.println(a.dequeueRear()); // 3
//a.dequeueRear();
}
}
答案 0 :(得分:0)
这句话看起来很可疑:
head.right.right.left = head.right;
在代码尝试访问其head.right.right
成员时,left
看起来可能不是null。
在尝试分配给head.right.right
head.right.right.left
答案 1 :(得分:0)
多个问题:
最相关的是:
head = new Node(null,head,head);
当您实例化Dequeue时,您将右侧和左侧的默认值指定为null,因为head为null。因此,将右侧和左侧分配为null,您将节点分配给头部。
发布您尝试将元素排入队列并尝试:
head.right = new Node(object, head, head.right);
head.right.right.left = head.right;
这里你正在设置为新节点但是看到head.right仍为null,如上所述。发布此声明您的队列中包含正确的元素(现在恰到好处)就像:
head -> node -> null
然后你做
head.right.right.left = head.right;
这里你有一个有效的node.right,但是node.right.right如上所述为null,你试图访问left for null,这是你得到NullPointerException的地方。
您可能需要调试并确定是否需要以下内容:
head.right.left = head.right;