2013-10-02 3 views
0

최근에 Java 학습을 시작했고 마지막으로 내가했던 것은 일반 프로그래밍과 이제 링크 된 목록이었습니다. 자, 나는 일반적인 링크 된 목록에서 노드 클래스를 구현하려고하지만, 몇 가지 문제가 있었어. 이 toString 메서드를 선언하여이 링크 된 목록을 반복하고 해당 요소를 인쇄 할 수 있지만 link.toString()을 호출 할 때마다 NullPointerException이 계속 발생하며 왜이 오류가 발생하는지 혼란스러워합니다. 내 toString 방법의 형식이 가능한만큼 효율적이지는 않지만 내 책의 지침을 따르려고한다는 것을 알고 있습니다. 내 Node 클래스 및 응용 프로그램 중 하나를 제시하고 있습니다. null에 대한일반 클래스로 노드 구현

public class GenericNode<E> { 

    private E data; 
    private GenericNode<E> link; 
    public GenericNode(E intialData, GenericNode<E> initialLink){ 
     data=intialData; 
     link=initialLink; 

    } 
    public GenericNode<E> addNodeAfter(E element) { 
     link = new GenericNode<E>(element, link); 
     return link; 
    } 

    public String toString(){ 


     String field1=" "; 
     String field2=" "; 
     String result=" "; 

     if(data==null){ 
      field1="dummy"; 
      System.out.println("in dummy"); 
     } 
     field1="Data: "+ data.toString()+ "\n"; 
     if(link==null){ 
      field2="null in tail!"; 
      System.out.println("in tail"); 
     } 
     field2="link: data: "+link.data.toString() ; 


     if(link!=null){ 
      result=field1+field2+link.toString(); 
     } 

     return field1+field2; 

    } 
} 

public class NodeAppilication { 

    public static void main(String[] args){ 

     GenericNode<String> head=new GenericNode<String>("Paul", null); 
     GenericNode<String> tail=new GenericNode<String>("Saul",head.addNodeAfter("Saul")); 
     //figure 1 
     System.out.print(head.toString()); 
     //figure2 
     tail.toString(); 

     GenericNode<String> dummy=new GenericNode<String>(null,head); 

    } 

} 

답변

1

귀하의 확인이 누락 else :

현재
if(data==null){ 
    field1="dummy"; 
    System.out.println("in dummy"); 
} else { // <<== Add an "else" here 
    field1="Data: "+ data.toString()+ "\n"; 
} 
if(link==null){ 
    field2="null in tail!"; 
    System.out.println("in tail"); 
} else { // <<== And here... 
    field2="link: data: "+link.data.toString(); 
} 

, null에 대한 코드 검사가 기본으로 field1field2의 값을 설정 한 후 data 또는 link을 직접 참조 해제하려고 시도하면 널 포인터 예외.

+0

이 코드를 구현해 주셔서 감사 드리며 더 이상 NullPointerException을 얻지 못했습니다.이 문제에 대한 지침에 따라 질문이 하나 더 있습니다.이 출력을 얻으려고합니다. data : Paul 링크 : 데이터 : Saul 링크 : 꼬리에 null! 그러나 나는 꼬리가 아무것도 가리 키지 않는다는 것을 보여주는 마지막 줄을 얻지 못합니다. 머리와 꼬리를 구현 한 방식 때문입니까? 고마워, 정말 도와 주셔서 감사합니다! – user2012891

+0

@ user2012891 현재 코드는 두 개의 링크를 거치며 끝납니다. 링크를 따라 가려면 루프를 추가해야하므로 임의 길이의 목록을 인쇄 할 수 있습니다. – dasblinkenlight