我制作了一个简单的程序,用于从命令行计算给定数组的平均值和中值。
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一样,依此类推。 这可能是什么问题。 感谢。
答案 0 :(得分:1)
您的数组中包含字符串,而不是数字,因此它们不按数字顺序排序。它们可能按ASCII顺序排序。由于您已经在遍历数组并将它们转换为数字,因此使用它们构建第二个数组并对其进行排序。