【发布时间】:2017-01-15 07:12:21
【问题描述】:
您好,我创建了一个代码来计算一组数字的标准差,下面是我的代码:
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
【问题讨论】:
-
标准差是基于平均值,而不是中位数。
-
这也不是找到中位数的正确方法。
-
它与您的第二个输入一起工作的原因是偶然地,平均值( (10+40+30+50+20) / 5 )恰好是 30,这也是中位数。
-
大家好,谢谢大家的评论,我的错误应该是平均值而不是中位数。编辑:好的,我必须编辑代码。
-
解决了我试过的问题!
标签: java math statistics standard-deviation