有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java标准偏差数组(我的算法错误)

我是一个初学者,学习如何编程

public static void main()
{
    int array[] = {1,-2,4,-4,9,-6,16,-8,25,-10};
    System.out.print(stdev(array));
}
public static double stdev(int array[])
{
    int stdev = 0;
    int average = 0;
    for(int i = 0; i<array.length;i++)
    {
        average = average+array[i];
    }
    average = average/array.length;
    for(int i = 0; i <array.length;i++)
    {
        stdev = stdev +(array[i]- average)*(array[i]- average);
    }
    return Math.sqrt((double) stdev/(array.length));
}

}

在我的教科书中,它说返回值是11.237,但我得到了10.672。请检查我的java代码。提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    平均值和标准差应该是双倍的,而不是整数

    average = average/array.length;
    

    否则,您将使用int除法,该除法返回一个截断的数字


    不同之处在于,您的计算应使用Wikipedia article中的“校正标准偏差”。平方根中的分子应为数组的长度-1:

    public static double stdev(int array[]) {
      double sum = 0.0;
      for (int i = 0; i < array.length; i++) {
         sum += array[i];
      }
      double average = sum / array.length;
    
      double sumOfSquares = 0.0;
      for (int i = 0; i < array.length; i++) {
         sumOfSquares += (array[i] - average) * (array[i] - average);
      }
    
      // **** the issue is below   you need to subtract 1 from array.length ******
      return Math.sqrt(sumOfSquares / (array.length - 1));
    }