2016-12-08 3 views
-1

Итак, у меня есть массив с 30 значениями вероятности как двойной. Я хочуУпорядочить индекс элементов с наивысшим двойным значением в массиве

  1. первой проверки для верхнего элемента в массиве
  2. магазин индекс в новом массиве
  3. повторите первый шаг за исключением элемента, который был проверен перед тем

Я пытаясь сделать это, заменив проверенный элемент на null и повторив шаг 1, проверив все элементы, кроме null. Но это дает мне исключение Null pointer. Хотя я создаю двойной объект Array.

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++; 
     } 
    } 
} 

Есть ли лучший способ достижения задачи, кроме замены элемента нулем?

+0

на какой линии вы получаете исключение? – Reek

+0

Итак, вы хотите иметь массив индексов и отсортировать этот массив по убыванию совпадающих двойных значений, так? Итак, [1.0, 2.0, 0.0] дадут [1, 0, 2]? –

+0

@reek обновленный ответ ... –

ответ

1

Есть намного более простой и быстрый способ сделать это, да. Просто создать массив индексов и сортирует их в соответствии с их соответствия двойного значения:

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] 
+0

Это работает как поток воды! –

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)); 
+0

Выход: [1, 0, 3, 2] – fabfas

Смежные вопросы