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

Java删除ArrayList元素时出现IndexOutOfBoundsException索引越界问题求解

问题根因

报错的核心原因是Order类中removeComputerPart方法的执行逻辑顺序错误:

// 原错误代码
public void removeComputerPart(int index){
    parts.remove(index); // 第一步先删除了索引对应的元素,此时ArrayList长度减1
    totalPrice-= parts.get(index).getPrice(); // 第二步再尝试读取原索引的元素,此时列表长度已经变小,索引越界
}

你要删除索引3的元素时,第一步执行完remove后,ArrayList的长度从4变成3,最大有效索引变为2,第二步再调用parts.get(3)自然触发索引越界。

修复方案

调整方法内的执行顺序:先读取待删除元素的价格扣减到总金额,再执行元素删除操作:

// 修复后代码
public void removeComputerPart(int index){
    // 先获取待删除元素的价格完成扣减
    totalPrice -= parts.get(index).getPrice();
    // 扣减完成后再删除元素
    parts.remove(index);
}
额外注意事项

如果需要支持同时删除多个元素(比如输入1,3同时删两个),直接按输入的正序删除会出现索引偏移问题:比如先删了索引1,原来的索引3会变成索引2,再删原索引3的时候就会删错或者越界。建议处理方式是把所有待删除的索引先按从大到小排序,再依次执行删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:24:03