2017-10-27 8 views
0

ArrayMethodsクラスを作成する必要があります。 を使用する•public static double median(double [] [] a) メソッド。私は2d配列のすべての値を持つリストを作成する必要があることを知っています。次にそれを整理し、中央値を見つけます。私はリストを作成する方法を知りません。誰もがこれで私を助けることができます。 を中央値のために、私はこれを行っているが、それは負の数や配列の奇数では動作しません: - 私たちは、その後、単にリストを作成する話をしている場合は2d配列から一時的なリストを作成して中央値を計算するにはどうすればよいですか?

public static void main(String[] args) { 
    double[][] a = { 
      {1,2,3}, 
      {4,5,6}, 
    }; 
    System.out.println(median(a)); 
} 


    public static double median(double[][] a2) { 
     double[] list = new double[a2.length*a2[0].length]; 
     double listPos = 0; 

     for(double i = 0 ; i < a2.length; i++) { 
      for(double j = 0; j < a2[(int) i].length; j++) { 
       list[(int) listPos++] = a2[(int) i][(int) j]; 
      Arrays.sort(a2[(int) i]); 
      } 
     } 
     double middle = list.length/2; 
     if ((list.length%2) == 1) { 
      return list[(int) middle]; 
     } 
     return (list[(int) (middle-1)] + list[(int) middle])/2.0; 
    } 

}

+0

は、新しいキーワードを使用して、配列や他のオブジェクト型とまったく同じです。リスト tmpList = new ArrayList <>();またはあなたのニーズに応じて別のタイプ – Stultuske

答えて

0

ハードコードするか(決して!)実行時に配列のサイズしか知ることができないため、何らかの値を格納できる動的リストが必要になります。このための最良の解決策は基本的なArrayListです。

まず、すべての値をArrayListに格納し、すべての値を格納したらソートすることができます。あなたが知っているように、それはそこからすべて下った丘です。

public static double median(double[][] a2) { 
    // check for an empty array 
    if(a2.length == 0) 
     throw new IllegalStateException("The array is empty"); 

    ArrayList<Double> list = new ArrayList<Double>(); 

    // first, add all the elements into the linear list 
    for(int i = 0; i < a2.length; i++) { 
     for(int j = 0; j < a2[0].length; j++) { 
      list.add(a2[i][j]); 
     } 
    } 

    // second, sort them 
    Collections.sort(list); 

    // and finally, determine the median based on the number of items 
    int length = list.size(); 

    // if there is an even number of values, take the average of the 2 middle values 
    if(length % 2 == 0) 
     return (list.get(length/2 - 1) + list.get(length/2))/2.0; 

    // else, return the middle value 
    return list.get(length/2); 
} 

は私も空の配列のチェックに投げたが、あなたはそれを取り除くしたい場合は以下のことができます(中央値の実装を使用して)の中央値は現在使用して見つけることができます。お役に立てれば!

+0

はい、ありがとう。ここにあなたがどのようにそれを示したかはわかります。ありがとうございました –

関連する問題