1

doubleのArrayListがあり、すべての数値の平均を見つける必要があります。配列リスト内のDoubleインスタンスの数は一定ではなく、2である可能性があり、90である可能性があります。アルゴリズムを自分で取得するために何時間も試していましたが、とにかく動作させることができませんでした。

何かアドバイスはありますか?または、この平均を取得するために、既存のライブラリにリンクすることができますか?

ありがとうございました

4

7 に答える 7

5

sum変数を作成します。

double sum = 0;

for ループを使用してリスト内の要素を調べます。

for (double d : yourList)

sum各反復で、現在の値に追加します。

    sum += d;

ループの後、平均を見つけるためsumに、リスト内の要素の数で割ります。

double avg = sum / yourList.size();

これは簡単すぎると思うすべての人のために...

上記の解決策は実際には完全ではありません。リストの最初の 2 つの要素が非常に大きく、最後の要素が小さい場合、sum += ddouble の精度が原因で、最後に向かって違いが生じない場合があります。

解決策は、平均計算を行う前にリストをソートすることです。

Collections.sort(doublesList);

小さな要素が最初に追加されるようになりました。これにより、それらがすべて可能な限り正確にカウントされ、最終的な合計に貢献することが保証されます:-)

于 2012-05-09T12:44:12.130 に答える
3

ストリームが好きなら:

List<Number> list = Arrays.asList(number1, number2, number3, number4);

// calculate the average
double average = list.stream()
                     .mapToDouble(Number::doubleValue)
                     .average()
                     .getAsDouble();
于 2015-09-09T19:23:26.290 に答える
1

平均の定義は、すべての値の合計を値の数で割ったものです。値をループして追加し、合計をリストのサイズで割ります。

于 2012-05-09T12:44:09.667 に答える
0

質問になってないかもしれませんが・・・こんな感じではないですか?

double sum = 0.0;
for (double element : list) {
    sum += element;
}
double average = sum / list.size();
于 2012-05-09T12:45:35.923 に答える
0

「すべての数値の平均」とは、リスト内のすべての double の平均を意味する場合、リスト内のすべての double を (ループで) 追加し、その合計をリスト内の double の数で割るだけです。

于 2012-05-09T12:44:35.700 に答える
0

やってみました:

List<Double> list = new ArrayList<Double>();
...    
double countTotal = 0;

for (Double number : list)
{
    countTotal += number;
}

double average = countTotal / list.size();
于 2012-05-09T12:45:17.733 に答える
0

リスト全体を合計するときにオーバーフローが心配な場合は、移動平均を使用できます。より多くの操作があるため、すべてを足し合わせて一度分割するよりも遅くなります。

for (int x = 0; x < list.size(); x++)
   average = (average / (x+1)) * (x) + list.get(x) / (x+1);
于 2012-05-09T12:47:39.100 に答える