2014-03-27 2 views
0

좋아요,이 프로그램은 거의 끝났지 만, 지금은 분실했습니다. 나는 널 포인터를 돌려주고있다. (라인 44에 나온다. 그러나 그것은 단지 while 루프이다.) 나는 그것을 고치는데 도움이 필요하다. 연결된 목록을 사용하여 대기열을 구현하고 다른 두 클래스는 100 %를 전달하므로 최종 클래스 (CarQueue)는 Null 포인터를 만드는 문제가있는 곳입니다.내 대기열에있는 널 포인터

while (temp.getNext() != null) { 

는 예외를 발생 라인이라면 (심지어 가능하다면 getNext()NullPointerException 던지고, OR)

public class CarQueue<E> { 

    private LinkNode<E> head; 
    private LinkNode<E> tail; 

    public CarQueue() { 
     head = null; 
     tail = null; 
    } 

    public CarQueue(E newData) { 
     LinkNode<E> temp = new LinkNode<E>(newData, null); 
     head = temp; 
     tail = temp; 
    } 

    public void addToQueue(E newData) { 
     LinkNode<E> temp = new LinkNode<E>(newData, null); 
     if (empty() == false) { 
      tail.setNext(temp); 
      tail = temp; 
     } else { 
      head = temp; 
      tail.setNext(temp); 
      tail = temp; 
     } 
    } 

    public String toString() { 
     LinkNode<E> temp = head; 
     String cars = ""; 
     while (temp.getNext() != null) { 
      cars += temp.toString() + '\n'; 
     } 
     return cars; 
    } 

    public E removeFmQueue() { 
     LinkNode<E> headReturn = head; 
     head = head.getNext(); 
     return headReturn.getData(); 

    } 

    public LinkNode<E> peek() { 
     return head.getNext(); 
    } 

    public boolean empty() { 
     if (head == null) 
      return true; 
     else 
      return false; 
    } 
} 
+0

, 나는 머리가 네, 널 (null) 인 빈 생성자를 설정 들었다,하지만 내 두 번째 생성자 머리에 임시 노드의 값이어야합니다. 두 번째 생성자는 대기열에 하나의 요소가있는 것처럼 설정되므로 머리와 꼬리는 둘 다 temp입니다. 내 테스트에 따르면, (temp.getNext()! = null) getNext 괜찮아요 예외를 던지고있는 동안, 그것은 완벽하게 작동하고 모든 테스트를 통과 내 LinkNode 클래스에서 설치했다. 내가 왜 null을 정확히 얻고 있는지 확신 할 수 없다. 희망이 도움이 – user3466773

답변

1

temp은 널이다. 그러나 temp이 문제라고 가정 해 봅시다.

temphead에 할당되므로 headnull입니까?

제로 파라미터 생성자가 호출되었지만 toString()을 호출하기 전에 다른 함수가 호출되지 않으면 실제로 tempnull이 할당됩니다. 따라서 temp.getNext()을 시도하면 NullPointerException이 발생합니다. 이를 방지하기 위해

, 당신은 toString() 메소드에 의해 반환되는 다른 값을 가질 수있다 :

public String toString() { 
    if(head == null) { 
     return "no head. I got nothing."; 
    } 

    //print the other stuff... 
} 

하지만, 정말, 최선의 해결책은 머리를 허용하지 않을 것입니다 - 따라서 온도를 - 널 (null)로, 이는 당신의 수업이 불안정하고 기본적으로 사용할 수없는 상태에 있음을 의미합니다. 또는 대안 전화 null 이외의 값으로 다른 생성자를 가지고 - - 다른 생성자 결코이 할 수 있도록

이 문제를 방지하는 가장 확실한 방법은 제로 매개 변수 생성자를 제거하는 것입니다 머리는 null로 남는다. 내 사양 떨어져 엄격하게가는

+0

후자의 솔루션을 따라야하지만 내 머리가 null 또는 내 머리가 대신 해야하는지 모르겠다 – user3466773

+0

비록 해당 생성자를 제거 할 수 없습니다. 내 강사는 내가 그와 함께 일할 때 그걸 그렇게 설정했다. 그래서 그것은 내 임무의 일부이다. – user3466773

+0

내 대답을 다시 업데이트했습니다. – aliteralmind