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

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 顺序排序。由于您已经遍历数组并将它们转换为数字,因此用它们构建第二个数组并对那个数组进行排序。