【问题标题】:java array nullpointerjava数组空指针
【发布时间】:2011-12-21 21:37:28
【问题描述】:

我试图找到一个数组的最小值。该数组包含节点 - 一个节点包含一个元素 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();

但是当我尝试使用它时,我得到了一个空指针异常。有人知道我做错了什么吗?

这是我的测试:

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

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

}

【问题讨论】:

  • for(int i = 1; i i 从 1 开始? S.length 是多少?在这种情况下,似乎 S[i] 为空......

标签: java arrays nullpointerexception


【解决方案1】:

这只是意味着数组S 的索引之一处的元素为空。也许您已将数组初始化为 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 参数化,并使用您定义的封装值和优先级的某种类型进行参数化。然后,您可以使用使用优先级的compareTo 方法让该类型实现Comparable,或者编写Comparator 用于查找最小值:

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

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

Collections.min(list, yourComparator);

-- 为min 而不是sort 编辑。对不起。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在索引数组时以 i=0 开始

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

      【讨论】:

      • 否,因为我将数组中的其他元素与数组中的第一个元素进行比较 --> Node temp = S[0];
      • 这实际上并没有解决问题,索引必须从 1 开始才能从第二个元素开始比较,因为第一个元素用作最小值的引物。
      • true 但它不会对结果产生任何影响,并且是当数组中只有一项时的简单解决方案
      猜你喜欢
      • 2011-07-25
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2013-04-13
      • 2020-11-29
      • 1970-01-01
      相关资源
      最近更新 更多