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

Java实现杨辉三角时触发IndexOutOfBoundsException问题求助

问题分析与修复

核心错误原因

你的代码出现IndexOutOfBoundsException的根本原因不是索引判断缺失,而是重复复用同一个List<Integer> row对象,并且在添加到三角列表后执行clear():

  • 调用triangle.add(row)时,添加的是row对象的引用而非副本
  • 后续row.clear()会清空该引用指向的List,导致triangle中已添加的所有行都变成空列表
  • 循环到第3行(i=2)时,尝试从triangle.get(1)(已被清空的空列表)中获取元素,直接触发索引越界异常

另外,你添加的if(i != 0 && j != 0)判断完全多余——进入else分支的前提是j != 0 && j != i,此时必然满足i > 0(否则j只能是0或i=0)。

修复后的代码

public List<List<Integer>> generate(int numRows) {
    List<List<Integer>> triangle = new ArrayList<List<Integer>>();
    for(int i = 0; i < numRows; i++){
        // 每次循环创建新的row对象,避免引用复用
        List<Integer> row = new ArrayList<>();
        for(int j = 0; j <= i; j++){
            if(j == 0 || j == i){
                row.add(1);
            } else {
                // 直接取上一行数据,此时上一行已被正确存入triangle
                int num = triangle.get(i-1).get(j-1) + triangle.get(i-1).get(j);
                row.add(num);
            }
        }
        triangle.add(row);
    }
    return triangle;
}

关键修复点

  • 把List<Integer> row的声明移到外层循环内部,每次循环创建新的List对象,确保添加到triangle的是独立的行数据
  • 移除多余的if(i != 0 && j != 0)判断,简化逻辑
  • 删除row.clear()语句,避免清空已存入三角列表的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:35:24