2

次のコードを実行すると、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);
}
}
4

2 に答える 2

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

戻り値

find(1).item

find(1)戻りますhead。しかしheadnullなので、戻ってきます

null.item

これはヌルポインタ例外です。find(index)で nullかどうかを確認する必要がありますget

于 2012-11-01T03:56:50.107 に答える
0

が にないことを確認することはptrありません。nullfind()

于 2012-11-01T03:31:30.487 に答える