尝试计算平均值和中位数时出现意外结果

时间:2016-09-08 22:19:49

标签: java arrays command-line

我制作了一个简单的程序,用于从命令行计算给定数组的平均值和中值。

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),但这是发生的事情:

enter image description here

一切都很好,直到我输入1-10,当我输入1-8时,值返回到结果,而1-11就像1-7一样,依此类推。 这可能是什么问题。 感谢。

1 个答案:

答案 0 :(得分:1)

您的数组中包含字符串,而不是数字,因此它们不按数字顺序排序。它们可能按ASCII顺序排序。由于您已经在遍历数组并将它们转换为数字,因此使用它们构建第二个数组并对其进行排序。