【问题标题】:Java median. When I have an array with a pair number, the median I get isnt correct [duplicate]Java 中位数。当我有一个带有一对数的数组时,我得到的中位数不正确[重复]
【发布时间】:2016-03-11 10:48:55
【问题描述】:
 public static double calcMedian(int[] array) {
    int n = array.length;
    int middle = n / 2;
    double median=0;
    for (int i = 0; i < n; i++) {
        if ((n % 2) == 1) {
            median = array[middle];
        } else if((n % 2) == 0){
            median = (array[middle-1] + array[middle]) / 2;
        }
    }
    return median;
}

当我有奇数个元素时,我没有得到正确的中位数。例如,如果我的数组是 [1 3 6 7 10 12],则中位数应该是 6.5。我得到的是6。我不明白为什么。提前致谢

【问题讨论】:

    标签: java median


    【解决方案1】:

    因为您将int 除以int,所以结果也是int 类型,并且结果的小数部分(.5)被截断。

    要获得双精度结果,请在除法运算之前将被除数或除数转换为双精度,如下所示:

    median = (array[middle-1] + array[middle]) / ((double) 2);
    

    median = ((double) (array[middle-1] + array[middle])) / 2;
    

    【讨论】:

      【解决方案2】:

      你应该把它改成这个(复制和粘贴准备好,也经过测试并给出 6.5)

      public static double calcMedian(int[] array) {
         int n = array.length;
         int middle = n / 2;
         double median=0;
         for (int i = 0; i < n; i++) {
             if ((n % 2) == 1) {
                 median = array[middle];
             } else if((n % 2) == 0){
                 median = ((double)(array[middle-1] + array[middle])) / 2;
             }
         }
         return median;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-26
        • 2022-11-13
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-19
        • 2023-01-01
        相关资源
        最近更新 更多