尝试计算均值和中值时出现意外结果
Unexpected result when trying to calculate Mean and Median
我做了一个简单的程序,从命令行计算给定数组的均值和中值。
import java.util.Arrays;
public class EdankJaya {
public static void main(String args[]) {
double sum = 0;
double d;
if(args.length < 1) {
System.out.println("Usage : java EdankJaya <Number1> <Number2> ..");
System.exit(1);
}
//Mean
for(String s : args) {
d = Double.parseDouble(s);
sum = sum+d;
}
double mean = sum/args.length;
System.out.println("Mean: " + mean);
//Median
Arrays.sort(args);
int med = args.length/2;
if((args.length % 2) == 0) {
double median1 = Double.parseDouble(args[med-1]);
double median2 = Double.parseDouble(args[med]);
System.out.println("Median :"+(median1+median2)/2);
} else {
double median = Double.parseDouble(args[med]);
System.out.println("Median :"+median);
}
}
}
我用于中值的技术是将 args.length
除以 2 并将其存储在 med
中。如果args.length
的值是偶数,就是args[med-1]
+args[med]
,偶数没问题。对于奇数 args.length
值,它只是 args[med]
,这在纸上工作正常,因为整数不会产生分数(11/2 将是 5),但这是发生的事情:
一切正常,直到我输入1-10,输入1-8时值返回结果,1-11和1-7一样,等等。
这里可能是什么问题。
谢谢。
您的数组中包含字符串,而不是数字,因此它们未按数字顺序排序。他们可能按 ASCII 顺序排序。由于您已经遍历数组并将它们转换为数字,因此用它们构建第二个数组并对那个数组进行排序。
我做了一个简单的程序,从命令行计算给定数组的均值和中值。
import java.util.Arrays;
public class EdankJaya {
public static void main(String args[]) {
double sum = 0;
double d;
if(args.length < 1) {
System.out.println("Usage : java EdankJaya <Number1> <Number2> ..");
System.exit(1);
}
//Mean
for(String s : args) {
d = Double.parseDouble(s);
sum = sum+d;
}
double mean = sum/args.length;
System.out.println("Mean: " + mean);
//Median
Arrays.sort(args);
int med = args.length/2;
if((args.length % 2) == 0) {
double median1 = Double.parseDouble(args[med-1]);
double median2 = Double.parseDouble(args[med]);
System.out.println("Median :"+(median1+median2)/2);
} else {
double median = Double.parseDouble(args[med]);
System.out.println("Median :"+median);
}
}
}
我用于中值的技术是将 args.length
除以 2 并将其存储在 med
中。如果args.length
的值是偶数,就是args[med-1]
+args[med]
,偶数没问题。对于奇数 args.length
值,它只是 args[med]
,这在纸上工作正常,因为整数不会产生分数(11/2 将是 5),但这是发生的事情:
一切正常,直到我输入1-10,输入1-8时值返回结果,1-11和1-7一样,等等。 这里可能是什么问题。 谢谢。
您的数组中包含字符串,而不是数字,因此它们未按数字顺序排序。他们可能按 ASCII 顺序排序。由于您已经遍历数组并将它们转换为数字,因此用它们构建第二个数组并对那个数组进行排序。