2014-11-12 3 views
0

Я новичок в java.почему этот код имеет NullPointerException в java?

В следующем коде NullPointerException, я действительно не знаю, что происходит. Похоже, я пытался получить доступ к нулевому указателю. Но я понятия не имею, где я обращаюсь к нулевому указателю. (Если это часть «головного узла», я не использовал свой объектный слот в этом коде, я думаю.)

Большое спасибо!

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(); 
    } 
} 
+1

Любой информации о том, где происходит NullPointerException? Любой журнал? – NSimon

+1

Вам необходимо предоставить трассировку стека. – Vipin

ответ

0

Это заявление выглядит очень подозрительно:

head.right.right.left = head.right; 

Это не похоже, что head.right.right будет ничем иным, чем нуль в точке, что код пытается получить доступ к его left члена.

Похоже, что вам нужно назначить новый узел head.right.right прежде чем пытаться присвоить head.right.right.left

0

Несколько вопросов:

Наиболее relevants являются:

head = new Node(null,head,head); 

При создании экземпляра DEQUEUE, вы назначаете bydefault вправо и влево как null, так как head имеет значение null. Таким образом, присваивая право и левое значение как null, вы назначаете узел в голову.

сообщение, что вы пытаетесь епдиеим элемент, и вы пытаетесь:

head.right = new Node(object, head, head.right); 
head.right.right.left = head.right; 

Здесь вы устанавливаете прямо как новый узел, но видеть, что head.right еще нуль, как уже упоминалось выше. Сообщение этого утверждения вашей очередь с правыми элементами (только правом на данный момент) будет, как:

head -> node -> null 

Тогда вы

head.right.right.left = head.right; 

Здесь у вас есть действительный node.right, но node.right.right является null, как указано выше, и вы пытаетесь получить доступ к левому элементу null, где вы получаете NullPointerException.

Вам может понадобиться для отладки и убедитесь, что если вы хотите что-то подобное или нет:

head.right.left = head.right; 
Смежные вопросы