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

Java ArrayList报索引越界错误,按指定规则生成新数组问题求解

问题原因分析
  • 索引越界直接原因:ArrayList.set()方法使用不当

    newarr初始化后仅添加了2个元素,可用索引只有0和1。循环中i从2开始调用newarr.set(i, ...),目标索引在列表中不存在,直接触发索引越界异常。set方法仅支持修改列表已存在的索引位置,不能用于新增元素。

  • 隐藏逻辑错误:直接修改原列表的子视图

    List.subList()返回的是原列表的视图,对返回的sub列表排序会直接修改原items列表的元素顺序,违背你「使用原列表原始元素计算中位数」的需求,后续计算的中位数结果都会出错。

修复方案
  1. 把newarr.set(i, sub.get(1))替换为newarr.add(sub.get(1)),按顺序追加元素,索引会自动对应
  2. 截取子列表后复制为新列表再排序,避免修改原列表的元素
修复后完整代码
import java.util.*;

public class P2J4
{
    public static void main (String[]args){
        List<Integer> items = Arrays.asList(5,2,9,1,7,4,6,3,8);
        ArrayList<Integer> newarr = new ArrayList<>();
        newarr.add(items.get(0));
        newarr.add(items.get(1));
    
        for(int i=2; i<items.size(); i++){
            // 截取子列表后复制为新列表,避免修改原列表
            List<Integer> sub = new ArrayList<>(items.subList(i-2, i+1));
            Collections.sort(sub);
            // 追加元素代替set操作
            newarr.add(sub.get(1));
        }
        // 输出验证结果:[5, 2, 5, 2, 7, 4, 6, 4, 6]
        System.out.println(newarr);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:54:07