2016-10-26 4 views
0

私はgetAveragePriceというメソッドを作成しています。定義されていない配列リスト(このメソッドのテスト/実装時にのみ定義される)の値の平均を計算する必要があります。doループを使って配列リストのdouble値の平均を見つける方法は?

public double getAveragePrice() { 
    double sum = 0; 
    int x = 0; //counting variable 
    do { 

これは私が今すぐ始めているものです。私は値が合計に加算されるたびに、xのカウントを1だけ増やす必要があるので、メソッドは最終的な合計をどのように分けるべきかを知っていることを知っています。私が持っている唯一の問題は、配列リストの値の合計を与えるためにdoループを設定する方法です。

答えて

2

あなたは、Java 8つのストリームを使って1行の平均を見つけることができます。

List<Double> vals; 
// initialize vals 
double avg = vals.stream().mapToDouble(Double::doubleValue).sum()/vals.size(); 

ます。またslighlyより多くの仕事である、ここで繰り返すことができます:

double sum = 0.0; 
for (double val : vals) { 
    sum += val; 
} 

double avg = vals.size() > 0 ? sum/vals.size() : 0.0d; 
+0

私はこれについて考えていました。 valが本当に大きいので、あなたの合計がInfinityに達したらどうなりますか?あなたのsum/vals.size()は単純に無限大ではありませんか? – AgentM

+0

合計が無限に達する前に、私はダブルで何らかのオーバーフローが発生すると思います。 –

+0

それにもかかわらず、それは平均化してしまいます。 私は、BigDecimalを使用してそれを分割する唯一の解決策を知ることができました。 – AgentM

0

あなたはする必要があり、ループ内の各要素を通りますリスト。

public double getAveragePrice() { 
double sum = 0; 
int x = 0; //counting variable 
    do { 
     sum += list.get(x); 
     x++; 
    } while (x < list.size()); 
int average = sum/x; 
return average; 
} 

基本的に、あなたは、x = 0のようにループを始めると、あなたはそのインデックスの値を追加し、各ループは、その後、xは要素の合計数よりも少ない場合は、その後、チェック1でXを高めます。そうであれば、リストに追加する要素が増えます。そうでない場合は、すでにすべての要素を合計しています。すべての要素を追加したので、xで除算して平均として返します。

+0

@Tim Biegeleisenそれを指摘してくれてありがとう。修正しました。 – MattCorr

+0

他の1つ:空のリストの場合は、ゼロによる除算を避けるために、カウント変数がゼロであるかどうかを確認することができます。 –

+0

それは本当ですが、私はOPがdo ... whileループを使用していたので、おそらくリストが空でないことを知っていると思います。get(0)はエラーをスローします。 – MattCorr

0

あなたにdo.while条件を持つことができます。

do{ 
     Sum += arr[x]; 
     x++; 
}While(x<arr.length) 

そして平均について:

Avg = sum/x 
0

代わりにあなたが使用することができます(それぞれ)の代わりに/しばらく操作を行います。

List<Double> values; // List<double> is no good apparently 
double average = 0; 
for (Double value : values) { 
    average += value.doubleValue(); // I miss PHP ;) 
} 
average /= values.size(); 

これは主に文体ですが、明示的に配列インデックスを使用してコレクション(リスト、配列、あなたが要素の順序を気にせず、それらの要素のいずれかを変更するつもりはない場合、言語がそれらを呼び出すものは何でも)。

これは、実際に後で必要としない(ループ中の値のみを気にする)カウンター/ポインタ変数をぶら下げていないことを意味し、誤って元のデータ'=='〜 '=' typoは古典です)。

注意:私はあまりJavaを書いていないので、おそらくforeachは悩まされていますか?

編集:コレクションを正しく使用するのに十分なJavaを書きません。

+0

'List 'を使用することはできませんが、_object_が必要です(プリミティブのリストはJavaのそれ以降のバージョンでサポートされています)。 –

+0

申し訳ありません、現在C#に慣れています。リスト? –

関連する問題