我陷入一个非常简单的问题超过2个小时。我正在尝试创建一个二维数组并用构造函数填充它。但是,我无法通过这一步。
public class Test
{
public State [][] test1= new State[4][3];//
public State test2[][]= new State[4][3];//
public State [][]test3;
public State test4[][];
public class State{
int position;
double reward;
int policy;
}
public Test(){
test1[1][1].position=1; // never worked
test2[1][3].position=2; //never worked
test3=new State[4][3];
test3[1][2].position=3; //never worked
test4=new State[4][3];
test4[2][2].position=4;//never worked
}
}
我使用以下代码调用上面的函数
Test test= new Test();
Log.e("done","pass"); //I never reach here. the code always stuck on the constructor.
答案 0 :(得分:6)
创建数组时:
public State [][] test1 = new State[4][3];
您正在创建一个可容纳4 * 3 State
个实例的数组,但数组中的每个位置都会初始化为null
。
在访问数组之前,您需要为数组中的每个位置分配State
的实例。如果你没有,你将获得NullPointerException
。
例如:
public Test()
{
test1[1][1] = new State();
test1[1][1].position = 1;
....
}