所以我有一个30个概率值为double的数组。我想
我试图通过将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替换元素之外,还有更好的方法来完成任务吗?
答案 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));