排列数组中具有最高double值的元素的索引

时间:2016-12-08 23:33:46

标签: java arrays sorting nullpointerexception

所以我有一个30个概率值为double的数组。我想

  1. 首先检查数组中的最高元素
  2. 将其索引存储在新数组
  3. 通过排除
  4. 之前检查过的元素重复第一步

    我试图通过将checked元素替换为null并通过检查除null之外的所有元素重复步骤1来实现。但这给了我Null指针异常。即使我正在创建一个Double对象的数组。

    Double[] P_array= {0.23, 0.45, 0.1, 0.65, 0.67};
    int maxIndex = 0;
    int[] index_sorting  = new int[P_array.length]; 
    int sort_index  = 0; 
    for (int i = 1; i < P_array.length; i++){
        if (P_array[i] != (null)){    //getting NPE exception here
        if ((P_array[i] > P_array[maxIndex])){
            maxIndex = i;
            System.out.print(new DecimalFormat("#0.00").format(P_array[i]));
             System.out.print(",");
             P_array[maxIndex]= null;   //also getting NPE exception here
             index_sorting[sort_index] = maxIndex;
             sort_index++;
            }
        }
    } 
    

    除了用null替换元素之外,还有更好的方法来完成任务吗?

2 个答案:

答案 0 :(得分:1)

有一种更简单,更快捷的方法,是的。只需创建一个索引数组,并根据匹配的double值对其进行排序:

double[] array = new double[] {2.0, 3.0, 0.0, 1.0};

Integer[] result = new Integer[array.length];
for (int i = 0; i < result.length; i++) {
    result[i] = i;
}
Arrays.sort(result, Comparator.<Integer>comparingDouble(index -> array[index]).reversed());

System.out.println("result = " + Arrays.toString(result));
// [1, 0, 3, 2]

答案 1 :(得分:0)

    double[] array = new double[] {2.0, 3.0, 0.0, 1.0};

    Integer[] result = IntStream.range(0, array.length).boxed().toArray(Integer[]::new);
    Arrays.sort(result, Comparator.<Integer> comparingDouble(i -> array[i]).reversed());

    System.out.println(Arrays.toString(result));