我对此代码有问题:
PointerCoords[][]srodki = new PointerCoords[n2][];
for(int i = 0; i < n2; i++)
{
srodki[i] = new PointerCoords[n2];
}
for(int i = 0; i < n2; i++)
{
for(int j = 0; j < n2; j++)
{
srodki[i][j].y = r + j*k;
srodki[i][j].x = r + i*k;
}
}
为什么我要获得NullPoInterException?
问题是您没有初始化 执行插入之前的srodki[i][j]
:
srodki[i][j].y = r + j*k;
srodki[i][j].x = r + i*k;
因此,首先,您需要执行:
srodki[i][j] = new PointerCoords();
,然后还可以。
在代码中,您不在数组中初始化对象。最初,所有数组元素均为null
,除非您像这样明确初始化它们:
for(int i = 0; i < n2; i++)
{
for(int j = 0; j < n2; j++)
{
// your constructor goes here
srodki[i][j] = new PointerCoords();
srodki[i][j].y = r + j*k;
srodki[i][j].x = r + i*k;
}
}
,因为您没有初始化参考。
。以下初始化数组:
PointerCoords[][] srodki = new PointerCoords[n2][n2];
for (int i = 0; i < n2; i++) {
srodki[i] = new PointerCoords[n2];
for (int j = 0; j < n2; j++) {
srodki[i][j] = new PointerCoords();
}
}
初始化数组后,它包含一个n2 * n2矩阵。
为了实际能够在数组内设置PointerCoords
对象的属性,您必须首先做
array[i][j] = new PointerCoords();
避免null指针的正确方法是
PointerCoords[][]srodki = new PointerCoords[n2][];
for(int i = 0; i < n2; i++)
{
srodki[i] = new PointerCoords[n2];
}
for(int i = 0; i < n2; i++)
{
for(int j = 0; j < n2; j++)
{
srodki[i][j]= new PointerCoords(); // added line
srodki[i][j].y = r + j*k;
srodki[i][j].x = r + i*k;
}
}