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

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 回答
1

您不能intMap.Entry#getValue(). 所以在你的代码中它应该是entry.getValue() 而不是 entry.getValue(i). 现在除此之外,你singleValues是一个ArrayList. 所以你不能从averageline 中的整数中减去它(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 回答