尝试访问方法中的三角数组时出现空指针异常
Null pointer exception when trying to access triangular array in method
我在尝试使用一种方法单独访问我的三角数组时遇到问题,每次我尝试使用 tarray[i][j]
时都会遇到空指针异常,除非它是在 class 中完成的创建,例如我有一个 get 方法并使用了 return tarray[0][0]
,它只是抛出错误,即使它在创建过程中打印得很好。
我知道我可能在做一些愚蠢的事情,但我就是想不通,
public class Triangular<A> implements Cloneable
{
private int inRa;
private A [][] tarray;
/**
* Constructor for objects of class Triangular
* @param indexRange - indices between 0 and indexRange-1 will be legal to index
* this a triangular array
* @throws IllegalArgumentException - if indexRange is negative
*/
public Triangular(int indexRange) throws IllegalArgumentException
{
inRa=indexRange;
int n = inRa;
int fill = 1;
Object [][] tarray = new Object [inRa + 1][];
for (int i = 0; i <= inRa; i++){
tarray[i] = new Object [n];
}
for (int i = 0; i < tarray.length; i++){
for (int j = 0; j + i < tarray[i].length; j++){
tarray[i][j + i] = fill;
fill ++;
}
}
for (int i = 0; i < tarray.length; i++) {
for (int j = 0; j + i < tarray[i].length; j++){
System.out.print(tarray[i][j + i] + " ");
}
System.out.println();
}
}
}
感谢您的帮助!
你没有在构造函数中给tarray
字段初始化任何东西,你初始化了一个同名的局部变量;这个:
Object [][] tarray = new Object [inRa + 1][]; // doesn't access the tarray field
但是,您必须向 tarray
字段分配一些内容才能修复 NPE。
顺便说一句:最好不要使用与字段同名的局部变量。
我在尝试使用一种方法单独访问我的三角数组时遇到问题,每次我尝试使用 tarray[i][j]
时都会遇到空指针异常,除非它是在 class 中完成的创建,例如我有一个 get 方法并使用了 return tarray[0][0]
,它只是抛出错误,即使它在创建过程中打印得很好。
我知道我可能在做一些愚蠢的事情,但我就是想不通,
public class Triangular<A> implements Cloneable
{
private int inRa;
private A [][] tarray;
/**
* Constructor for objects of class Triangular
* @param indexRange - indices between 0 and indexRange-1 will be legal to index
* this a triangular array
* @throws IllegalArgumentException - if indexRange is negative
*/
public Triangular(int indexRange) throws IllegalArgumentException
{
inRa=indexRange;
int n = inRa;
int fill = 1;
Object [][] tarray = new Object [inRa + 1][];
for (int i = 0; i <= inRa; i++){
tarray[i] = new Object [n];
}
for (int i = 0; i < tarray.length; i++){
for (int j = 0; j + i < tarray[i].length; j++){
tarray[i][j + i] = fill;
fill ++;
}
}
for (int i = 0; i < tarray.length; i++) {
for (int j = 0; j + i < tarray[i].length; j++){
System.out.print(tarray[i][j + i] + " ");
}
System.out.println();
}
}
}
感谢您的帮助!
你没有在构造函数中给tarray
字段初始化任何东西,你初始化了一个同名的局部变量;这个:
Object [][] tarray = new Object [inRa + 1][]; // doesn't access the tarray field
但是,您必须向 tarray
字段分配一些内容才能修复 NPE。
顺便说一句:最好不要使用与字段同名的局部变量。