标准偏差

时间:2016-09-07 14:23:54

标签: java math statistics standard-deviation

您好我已经创建了一个代码来计算一组数字的标准差,这里我的代码如下:

public class standardDev {
 public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int[] arr = new int[n];
    double sum = 0.0;
    for(int i = 0; i < n; i++) {
        arr[i] = in.nextInt();
    }
    Arrays.sort(arr);
    double median = n % 2 != 0 ? arr[n/2] : (arr[n/2] + arr[(n/2)-1])/2;
    for(int i = 0; i < n; i++) {
        sum += Math.pow(arr[i] - median,2);
    }
    System.out.printf("%.1f", Math.sqrt(sum/n));
 }
}

但输入是这样的:

  

10

     

64630 11735 14216 99233 14470 4978 73429 38120 51135 67060

我得到了与预期答案不同的结果。 我的输出:30475.6 预期输出:30466.9

但如果我尝试下面的输入,我会得到正确答案:

  

5

     

10 40 30 50 20

我的输出:14.1

预期输出:14.1

1 个答案:

答案 0 :(得分:1)

重写您的代码以实际计算标准偏差,该偏差基于平均值:

import java.util.*;
import java.lang.*;
import java.io.*;

class standardDev
{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        double sum = 0.0;
        double mean = 0;
        for(int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
            mean += arr[i];
        }
        mean /= n;
        for(int i = 0; i < n; i++) {
            sum += Math.pow(arr[i] - mean,2);
        }
        System.out.printf("%.1f", Math.sqrt(sum/n));
   }
}

示例:http://ideone.com/qY1wkw