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

Java循环触发IndexOutOfBoundsException异常的最优解决方法是什么?

问题分析

首先明确原报错的核心原因:

  • List的索引范围是0 ~ size-1,原for循环的终止条件为i < size,当i迭代到size-2或size-1时,访问c.get(i+2)的索引已经超出合法范围,直接触发IndexOutOfBoundsException
  • 你现有的修复方案虽然解决了越界问题,但存在两处冗余:同一边界条件重复判断两次,且for循环默认自增i和内部手动i++的逻辑混用,可读性较差。
优化实现方案

jumpingOnClouds问题的核心要求是求最少跳跃次数,优先跳2步是最优策略,我们可以改用更贴合步长不固定场景的while循环,从根源避免越界,代码如下:

public static int jumpingOnClouds(List<Integer> c) {
    int size = c.size();
    int jumpCount = 0;
    int currentIndex = 0;
    // 只要没到最后一朵云就继续跳
    while (currentIndex < size - 1) {
        // 优先判断能不能跳2步:先判断索引合法,再判断云是普通云(值为0)
        if (currentIndex + 2 < size && c.get(currentIndex + 2) == 0) {
            currentIndex += 2;
        } else {
            // 不能跳2步就跳1步
            currentIndex += 1;
        }
        // 每次操作对应一次跳跃
        jumpCount++;
    }
    return jumpCount;
}

优化点说明

  • 循环终止条件直接限定为currentIndex < size - 1,只要到达最后一朵云就停止循环,不会出现多余的跳跃计数
  • 利用Java&&运算符的短路特性,只要currentIndex + 2 < size不成立,就不会执行后续的c.get取值操作,天然避免索引越界
  • 手动控制索引的增减,没有和for循环的默认自增逻辑混用,代码逻辑和跳跃规则完全对应,可读性和可维护性更强
  • 没有冗余的边界判断,代码更简洁,执行效率也更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:00