java数组nullpointer

时间:2011-11-04 10:12:31

标签: java arrays nullpointerexception

我正在尝试找到最小的数组。该数组包含节点 - 节点包含元素E和优先级int。我想在数组中找到优先级最低的节点。

@Override
public E min() {
    Node temp = S[0];
    for(int i = 1; i<S.length; i++){
        int prio= S[i].getPrioritet();   <-- nullpointer excp.
        if(prio<temp.getPrioritet()){
            temp = S[i];
        }
    }
    return temp.getElement();

但是当我尝试使用它时,我得到一个nullpointer异常。有谁知道我做错了什么?

这是我的测试:

PrioritetArraySorteret<String> p = new PrioritetArraySorteret<String>();

    p.insert(1, "Hello");
    p.insert(3, "Hi");
    p.insert(4, "Hawdy");
    System.out.println(p.min());

}

3 个答案:

答案 0 :(得分:1)

从i = 0开始,因为数组已编入索引

for(int i = 0; i<S.length; i++){
    int prio= S[i].getPrioritet();   <-- nullpointer excp.
    if(prio<temp.getPrioritet()){
        temp = S[i];
    }
}

答案 1 :(得分:0)

它只是意味着数组S之一的索引处的元素为null。也许您已将数组初始化为n,但填充的位置不到n

这样改变可能会解决它:

for(int i = 1; i<S.length; i++){
    if(S[i] != null) {
        int prio= S[i].getPrioritet();   <-- nullpointer excp.
        if(prio<temp.getPrioritet()){
            temp = S[i];
        }
     }
}

那就是说,你可能会在这里重新发明轮子。使用一个简单的ArrayList参数化您定义的某种类型,它封装了一个值和优先级。然后,您可以使用Comparable方法使用该类型实现compareTo使用优先级,或编写Comparator用于查找最小值:

List<YourType<String>> list = new ArrayList<YourType<String>>();
Collections.min(list);

或者,如果您使用的是自定义比较器:

Collections.min(list, yourComparator);

- 针对min而不是sort进行了修改。遗憾。

答案 2 :(得分:0)

数组S尚未初始化或已初始化一个或多个元素。