2016-12-08 4 views
-1

したがって、30個の確率値を持つ配列をdoubleとして持っています。私は私が新しいアレイ 配列の中で最も高いdouble値を持つ要素のインデックスを配列します。

  • の配列
  • ストアインデックスで最高の要素のための

    1. 最初のチェックに

    前にチェックされた要素を除外して最初のステップを繰り返したいです検査された要素をnullに置き換えて、nullを除くすべての要素を検査して手順1を繰り返すことによって、それを実行しようとしています。しかし、これは私にヌルポインタ例外を与えます。私はArrayの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

    れていますか? – Reek

    +0

    したがって、インデックスの配列を持ち、この配列を、一致するdouble値の降順で並べ替えるのがいいでしょうか?だから[1.0,2.0,0.0]は[1、0、2]を与えるだろうか? –

    +0

    @reek updated answer ... –

    答えて

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

    関連する問題