我正在尝试找到最小的数组。该数组包含节点 - 节点包含元素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());
}
答案 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尚未初始化或已初始化一个或多个元素。