2012-11-01 2 views
2

다음 코드를 실행하면 Null Pointer Exception이 발생합니다. 나는 그것이 왜 일어나고 있는지를 알 수 없다.java의 다음 코드에서 Null Pointer Exception을 일으키는 원인은 무엇입니까?

public class LinkedList<T> { 
private Link head = null; 
private int length = 0; 

public T get(int index) { 
    return find(index).item; 
} 

public void set(int index, T item) { 
    find(index).item = item; 
} 

public int length() { 
    return length; 
} 

public void add(T item) { 
    Link<T> ptr = head; 
    if (ptr == null) { 
     // empty list so append to head 
     head = new Link<T>(item); 
    } else { 
     // non-empty list, so locate last link 
     while (ptr.next != null) { 
      ptr = ptr.next; 
     } 
     ptr.next = new Link<T>(item); 
    } 
    length++; // update length cache 
} 

// traverse list looking for link at index 
private Link<T> find(int index) { 
    Link<T> ptr = head; 
    int i = 0; 
    while (i++ != index) { 
     if(ptr!=null) { 
      ptr = ptr.next; 
     } 
    } 
    return ptr; 
} 

private static class Link<S> { 
    public S item; 
    public Link<S> next; 

    public Link(S item) { 
     this.item = item; 
    } 
} 

public static void main(String[] args) { 
    new LinkedList<String>().get(1); 
} 
} 

답변

2
new LinkedList<String>().get(1) 

반환

find(1).item 

find(1) 반환 head. 그러나 head가 null의 경우, 그래서 당신은 널 포인터 예외입니다

null.item 

을 반환한다. getfind(index)이 null인지 확인해야합니다.

+0

감사합니다. 그것은 그것을 명확하게합니다. –

0

당신은 ptrfind()에서 null 아닌지 확인하지 않습니다.

+0

find()에서 ptr이 null이 아닌지 확인하는 코드를 추가했습니다. 하지만 여전히 Null Pointers가 발생하고 있습니다. –

관련 문제