2012-09-15 5 views
0

Java로 deque를 작성하려고했지만 새 노드를 추가 할 때 nullpointer 예외가 발생합니다. 여기가 이중 연결리스트에 사용하는 헬퍼 클래스는 다음과 같습니다 Java에서 deque를 만들려고 할 때 Nullpointer 예외가 발생했습니다.

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 예외가 다음과 같이

private class Node { 
    private Item item; 
    private Node next; 
    private Node prev; 
} 

은 그 때 나는 목록의 시작 부분에 노드를 추가 . 내가 무슨 일을하고있을 수도

Warning: The field Deque2<Item>.Node.prev is never read locally

: 나는 코드를 컴파일 할 때 또한, 나는 다음과 같은 경고를 얻을?

+0

deque가 비어있는 경우,'first'는 null이되어'oldfirst'도 null가됩니다. – Brian

+0

'node oldfirst = first;'first'는 무엇입니까? – Ilya

답변

0

예외는 oldfirst이 null임을 의미합니다. 그리고 Node oldfirst = first으로 초기화하면 first이 null이라는 의미입니다.

+0

다시 한번 감사드립니다. 그건 의미가 있습니다. 그리고 다른 모든 사람들 덕택입니다. – user1673890

0

양 큐가 비어있을 때 first이 null 인 것으로 추측됩니다. 그런 다음 firstoldFirst에 할당하면 oldFirst이 null이되므로 prev에 액세스하려고하면 NPE가 제공됩니다. 액세스 변경 :

if (oldFirst != null) 
    oldfirst.prev = first; 

수정해야합니다.

귀하의 경고는 단지 당신이 아직 축축한 곳에서 prev을 사용하고 있지 않다는 것만으로 당신이 방금 설정 한 것입니다. 재미있는 사실 : deque가있는 경우 이 이중 연결 목록이 필요하지 않으므로 prev 변수를 사용할 가능성이 거의 없습니다. LinkedListDequeQueue을 구현하는 것과 비슷한 방법으로 대기열에서 대기열 처리를 지원하려는 경우 prev을 유지해야합니다.

관련 문제