You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArrayList求中位数时遭遇二元运算符'+'操作数类型错误

解决ArrayList中位数计算的'bad operand types'错误

嘿,我来帮你搞定这个计算中位数时遇到的错误!你看到的bad operand types for binary operator '+'问题,根源是没有给ArrayList指定泛型,导致元素类型是Object,没法直接做数值加法运算。下面一步步给你讲清楚怎么修复:

错误原因拆解

你原来的代码里用了ArrayList sortedList = new ArrayList();,这是原始类型的ArrayList,它存储的所有元素都是Object类型。当你调用get()方法时,返回的是Object,Java不允许对两个Object执行+运算,所以就抛出了这个错误。

另外还有两个小坑要注意:

  • median变量定义在了方法外面,会有作用域问题,应该放到printMedian方法内部。
  • 如果用整数除法/2,会丢失小数部分(比如两个中间数相加除以2应该得到小数,但整数除法会取整)。

修复后的完整代码

import java.util.ArrayList;
import java.util.Collections;

public class MedianCalculator {
    public static void printMedian(int x[]) { 
        // 指定泛型为Integer,确保列表只存整数,get()直接返回Integer
        ArrayList<Integer> sortedList = new ArrayList<>(); 
        
        // 把传入的数组元素添加到列表里(替换你原来的手动测试元素)
        for (int num : x) {
            sortedList.add(num);
        }
        
        // 关键!中位数必须基于有序集合,所以要先排序
        Collections.sort(sortedList);
        
        double median = 0; 
        int size = sortedList.size();
        if (size % 2 == 0) { 
            int firstIndex = (size - 1) / 2; 
            int secondIndex = size / 2; 
            // 用2.0做除法,确保结果是浮点数,保留小数
            median = (sortedList.get(firstIndex) + sortedList.get(secondIndex)) / 2.0; 
        } else { 
            int singleIndex = size / 2; 
            median = sortedList.get(singleIndex); 
        }
        
        System.out.println("计算得到的中位数是:" + median);
    }

    public static void main(String[] args) {
        // 测试用例
        int[] testArray = {1,3,2,4};
        printMedian(testArray);
    }
}

核心修复点说明

  • 泛型声明:用ArrayList<Integer>替代原始ArrayList,这样列表中的元素类型被明确为整数,get()方法返回的Integer会自动拆箱成int,可以直接参与加法运算。
  • 排序处理:中位数的计算前提是集合有序,所以一定要调用Collections.sort()对列表排序(你原来的代码手动添加的是有序元素,但实际处理数组时必须排序)。
  • 浮点数除法:用/2.0代替/2,避免整数除法导致的精度丢失,确保偶数个元素时中位数是正确的小数。

内容的提问来源于stack exchange,提问作者bensonable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:23:49