0

標準偏差を計算する過程で、個々の値を取得して分散を見つけようとすると、エラーが発生します。.get() と .getValue のどちらを使用すればよいかわかりません。私はすでに平均を計算しました。

final ArrayList<Map.Entry<String,NumberHolder>> entries = new ArrayList<Map.Entry<String,NumberHolder>>(uaCount.entrySet());


for(Map.Entry<String,NumberHolder> entry : entries)  //iterating over the sorted hashmap
{

    double temp = 0;
    double variance = 0;

    for (int i = 0; i <= entry.getValue().occurrences ; i ++)
        {               
            temp += ((entry.getValue(i).singleValues) - average)*((entry.getValue(i).singleValues) - average);

            variance = temp/entry.getValue().occurrences;
        }

        double stdDev = Math.sqrt(variance);

これは NumberHolder クラスで、メイン関数に入力します。標準偏差には次の式を使用しています: http://www.mathsisfun.com/data/standard-deviation-formulas.html

私のコードに基づいて、オカレンスはNで、singleValues配列リストの値はXiです

public static class NumberHolder
{
    public int occurrences = 0;
    public int sumtime_in_milliseconds = 0; 
    public ArrayList<Long> singleValues = new ArrayList<Long>();
}

これは私が得るエラーです。:

The method getValue() in the type Map.Entry<String,series3.NumberHolder> is not applicable for the arguments (int). 

さらにコードを表示する必要がある場合は、質問してください。不必要なものは何も入れたくありませんでしたが、何かを見落としている可能性があります。

4

3 に答える 3

2

エラーは、まさにそれが言うことを意味します。に int 引数を渡すことはできませんgetValue()

に変更entry.getValue(i)するentry.getValue()と、正常に動作するはずです。

私はそれがentry.getValue().singleValues.get(i)あなたが望むようなものだと思います。occurrencesが常に等しい場合はentry.getValue().singleValues.size()、それを取り除くことを検討してください。

于 2013-04-05T17:37:50.940 に答える
1

intで引数として取ることはできませんMap.Entry#getValue()。したがって、コードでは、entry.getValue() の代わりに entry.getValue(i)する必要があります。これとは別に、あなたsingleValuesArrayList. averageそのため、行の整数からそれを引くことはできません(entry.getValue(i).singleValues) - average)。最初に から要素を抽出し、ArrayList次に からそれを差し引く必要がありaverageます。for ループは次のようになります。

for (int i = 0; i < entry.getValue().occurrences ; i ++)// i < entry.getValue() to avoid IndexOutOfBoundsException
{               
   temp += ((entry.getValue().singleValues.get(i)) - average)*((entry.getValue().singleValues.get(i)) - average);
   variance = temp/entry.getValue().occurrences;
}
于 2013-04-05T17:39:03.283 に答える
1

getValueは整数の引数を取りません。以下を使用できます。

for (int i = 0; i < entry.getValue().singleValues.size(); i++) {
   Long singleValue = entry.getValue().singleValues.get(i);
   temp += (singleValue - average) * (singleValue - average);

   variance = temp / entry.getValue().occurrences;
}

またArrayLists、ゼロベースなので、で終わる必要がありますsize - 1

于 2013-04-05T17:38:02.033 に答える