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); } }
关键修改点
- 构造方法中去掉
char[]、int[]、String这些类型声明,直接用this.变量名赋值给类的成员变量; main方法里修改了打印方式,直接打印数组会输出对象地址,循环打印才能看到帕斯卡三角的数值。
内容的提问来源于stack exchange,提问作者bigbitter123
相关产品推荐
相关产品推荐

