标准差arraylist错误

时间:2013-04-05 17:33:12

标签: java arraylist hashmap standard-deviation

当我尝试检索单个值以在计算标准偏差的过程中找到方差时,我收到错误。我无法弄清楚是否使用.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 arraylist中的值为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). 

如果你需要查看更多代码请问,我不想做任何不必要的事情,但我可能错过了一些东西。

3 个答案:

答案 0 :(得分:2)

错误意味着它的内容。您不能将int参数传递给getValue()

entry.getValue(i)更改为entry.getValue(),它应该可以正常工作。

我认为你想要的是entry.getValue().singleValues.get(i)。如果occurrences始终等于entry.getValue().singleValues.size(),请考虑删除它。

答案 1 :(得分: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为零,因此您应该以{{1​​}}结束。

答案 2 :(得分:1)

您无法在Map.Entry#getValue()中将int作为参数。因此,在您的代码中,它应该是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;
}