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

帕斯卡三角代码变量声明顺序调整后消除未初始化错误的原因

帕斯卡三角代码编译错误原因解析

在实现帕斯卡三角生成功能时,编写的Java代码触发了编译错误,但调整变量声明顺序后即可正常运行,具体情况如下:

错误代码示例

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rows = new ArrayList<List<Integer>>();
        List<Integer> pre, row = null;
        
        for(int i=0; i<numRows; ++i){
            row = new ArrayList<Integer>();
            for(int j=0; j<=i; ++j){
                if(j==0 || j==i)
                    row.add(1);
                else
                    row.add(pre.get(j-1)+pre.get(j));
            }
            pre=row;
            rows.add(row);
        }
        
        return rows;
    }
}

编译错误信息

Line 12: error: variable pre might not have been initialized
                    row.add(pre.get(j-1)+pre.get(j));
                            ^

修复后的变量声明

将第四行的变量声明改为:

List<Integer> row, pre = null;

原因解析

这是Java严格的局部变量初始化规则导致的:

  • Java要求局部变量必须显式初始化后才能被使用,编译器仅做静态语法检查,不会分析代码的执行逻辑流程。
  • 原代码中List<Integer> pre, row = null;的写法,只有row被赋值为null完成初始化,pre仅被声明,没有任何初始化操作。
  • 当i>=1(生成第二行及以后的行)时,代码会进入else分支调用pre.get(...),编译器无法保证pre此时已经被赋值,因此抛出编译错误。
  • 修复后的List<Integer> row, pre = null;,给pre显式赋值了null,满足“已初始化”的要求,编译器不再报错。从逻辑上看,当numRows>=2时,pre在进入else分支前已经被第一次循环的pre=row赋值为有效List对象,不会触发空指针异常。

内容的提问来源于stack exchange,提问作者Sachin K Rao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:06:23