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

Java实现IntegerList类findMedian方法报错,求正确实现及优化方案

代码无法运行的核心原因
  • 编译层面错误:同一份Java源文件中不能存在两个public修饰的类,当前IntegerList和Main都加了public,编译直接失败,无法运行。
  • 逻辑缺失:findMedian方法没有实现任何中位数计算逻辑,直接硬编码返回0,不可能得到正确结果。
  • 设计冗余:需求要求findMedian方法操作当前IntegerList实例自身的list属性,不需要额外传入Vector参数,当前方法的入参属于多余设计。
符合需求的修改方案

调整后代码如下:

import java.util.Vector;
import java.util.Collections;

public class IntegerList {
    Vector<Integer> list = new Vector<>();

    public int findMedian() {
        // 空列表抛出指定异常
        if (list.isEmpty()) {
            throw new IllegalArgumentException();
        }
        // 拷贝原列表排序,避免修改原列表的元素顺序
        Vector<Integer> sortedList = new Vector<>(list);
        Collections.sort(sortedList);
        // 按需求规则取值,完全匹配题目给出的示例结果
        return sortedList.get(sortedList.size() / 2);
    }
}

// 同文件下的非public类,解决编译冲突
class Main {
    public static void main(String[] args) {
        IntegerList v = new IntegerList();
        v.list.add(2);
        v.list.add(3);
        v.list.add(4);
        v.list.add(9);
        // 直接调用实例方法,无需传参
        System.out.println(v.findMedian());
    }
}

调整说明:

  • 移除了Main类的public修饰符,解决同文件多public类的编译错误。
  • 去掉findMedian方法的入参,直接操作实例自身的list属性,符合需求设计要求。
  • 新增排序逻辑,拷贝原列表排序避免修改原数据,排序后取size/2位置的元素,完全匹配题目给出的两个示例的结果要求。
  • 保留空列表判断逻辑,符合异常抛出要求。
更优实现方案
  • 集合替换:如果没有多线程使用场景,Vector可以替换为ArrayList,Vector所有方法默认加同步锁,单线程场景下性能更低。
  • 算法优化:当前排序实现的时间复杂度是O(nlogn),如果处理的列表量级很大,可以用快速选择算法替换,平均时间复杂度降到O(n),不需要全量排序就能找到目标位置的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:06