2-dimension table and NullPointerException



我对此代码有问题:

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;
            }
    }

相关内容

最新更新