0

我对这段代码有疑问:

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?

4

6 回答 6

4

srodki[i][j]问题是您在执行插入之前没有初始化 的内容 :

srodki[i][j].y = r + j*k;
srodki[i][j].x = r + i*k;

所以首先,你需要执行:

srodki[i][j] = new PointerCoords();

然后就可以了。

于 2012-11-06T11:17:18.793 回答
1

在您的代码中,您不会初始化数组中的对象。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;
            }

    }
于 2012-11-06T11:10:25.503 回答
1

因为您还没有初始化引用

于 2012-11-06T11:11:37.707 回答
1

按如下方式初始化您的数组:

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();
    }
}
于 2012-11-06T11:23:09.417 回答
0

初始化数组后,它包含一个 n2 * n2 空值矩阵。

为了真正能够PointerCoords在数组内设置对象的属性,您必须首先执行

array[i][j] = new PointerCoords();
于 2012-11-06T11:10:53.263 回答
0

避免空指针的正确方法是

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

    }
于 2012-11-06T11:13:19.373 回答