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

Java构造方法中数组返回null或编译找不到符号的问题解决

解决Sierpinski类中帕斯卡三角数组的赋值与访问问题

问题根源分析

  • 第一个问题(返回null):你在构造方法里重新声明了int[] pascal局部变量,这会覆盖类的成员变量。构造方法里操作的是这个局部变量,类的成员变量根本没被赋值,始终是默认的null。
  • 第二个问题(编译报错):删掉类的pascal成员变量后,构造方法里的pascal只是局部变量,外部main方法访问s1.pascal时,类中没有这个成员,自然找不到符号。

修正方案

核心是直接操作类的成员变量,不要在构造方法里重新声明同名局部变量,用this.明确指向成员变量(或者省略,只要不冲突)。

修正后的完整代码:

public class sierpinski {

    public static void main(String[] args) {
        sierpinski s1 = new sierpinski(3);
        // 循环打印数组内容,直接打印数组会输出对象地址
        for (int num : s1.pascal) {
            System.out.print(num + " ");
        }
    }

    int row;
    String LString;
    int[] pascal;
    char[] Larray;

    public static int fact(int n) {
        int solution = 1;
        if (n == 0) {
            solution = 1;
            return solution;
        } else {
            for (int i = 2; i <= n; i++) {
                solution = solution * i;
            }
        }
        return solution;
    }

    public static int ncr(int n, int r) {
        int ncr1 = fact(n) / (fact(r) * fact(n - r));
        return ncr1;
    }

    sierpinski(int row) {
        this.row = row;
        // 直接给成员变量赋值,不要重新声明局部变量
        this.Larray = new char[row + 1];
        this.pascal = new int[row + 1];

        for (int i = 0; i < row + 1; i++) {
            int a = ncr(row, i);
            this.pascal[i] = a;
        }
        this.LString = String.valueOf(this.Larray);
    }
}

关键修改点

  1. 构造方法中去掉char[]、int[]、String这些类型声明,直接用this.变量名赋值给类的成员变量;
  2. main方法里修改了打印方式,直接打印数组会输出对象地址,循环打印才能看到帕斯卡三角的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:01:14