2014-05-13 1 views
0

머리글과 뒷면에 노드를 허용하는 Linked List dequeue 클래스를 만들려고합니다. 모든 것이 잘 컴파일되지만, 실행할 때 NullPointerException이 발생합니다. 그것은 내 내부 QueueNode 클래스를 가리키는지만, 그것을 고정하는 방법에 대해 잘 모르겠습니다. 이견있는 사람? 감사!Dequeue 객체 클래스에 대한 NullPointerException

public class LinkedDequeue 
{ 
    private QueueNode front;  //index of current front element 
    private QueueNode rear;  //index of current rear element 
    private int count;   //current # of elements 

    class QueueNode 
    { 
     private Object data; 
     private QueueNode link; 
    } 

    public LinkedDequeue() 
    { 
     front = rear = null; 
     count = 0;  
    } 

    public void headAdd (Object o) 
    { 
     if (isEmpty()) 
     { 
     front.data = o; 
     rear.data = o; 
     front.link = rear; 
     rear.link = null; 
     } 
     else 
     { 
     QueueNode temp = new QueueNode(); 
     temp.data = o;  
     front.data = temp; 
     front.link = front; 
     } 

     count++; 
    } 

    public boolean isEmpty() 
    { 
     return (count == 0); 
    } 

    public static void main (String [] args) 
    { 
     LinkedDequeue list = new LinkedDequeue(); 

     list.headAdd ("test?"); 

     System.out.println (list.toString()); 
    } 

} 
+0

여기서 toString()을 list로 정의 했습니까? – working

+0

나는 목록을 만들었고 그 후에 front.data (null은 데이터 필드가 없음)를 편집하려고 시도 할 때 그 문제가 앞 뒤의 == null이라고 생각한다. –

답변

2

당신은 항상 새로운 QueueNode을() 당신이 당신의 LinkedDequeue에 요소를 추가 할 때() 생성해야합니다. addHead() 메소드를 다음과 같이 변경하십시오. -

public void headAdd(Object o) { 
    QueueNode temp = new QueueNode(); 
    temp.data = o; 

    if (isEmpty()) { 
     front = temp; 
     rear = front; 
     front.link = null; 
     rear.link = null; 
    } else { 
     temp.link = front; 
     front = temp; 
    } 

    count++; 
} 
3

나는 당신의 전면 및 후면 == null이 당신이 목록을 작성하고 그 후 (널 (null)이 데이터 필드가없는) front.data을 편집하려고 할 때 문제가 있다고 생각합니다. 따라서 당신은 당신의 코드 내에서이 줄을 추가해야합니다

if (isEmpty()) 
    { 
    front = new QueueNode(); 
    rear = new QueueNode(); 
    front.data = o; 
    rear.data = o; 
    front.link = rear; 
    rear.link = null; 
    } 
2

변화에게 당신의 생성자를 아래로 :

public LinkedDequeue() 
     { 
      front = new QueueNode(); 
      rear = new QueueNode(); 
      count = 0; 
     } 
+0

그가 else 블록에서 무엇을 변경해야 하는가? –

+0

그는 내 잘못이 아니어야합니다. –

+0

ok! 나는 당신이 의미하는 것을 확신하지 못했습니다 :) –

관련 문제