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

参照を初期化していないためです。

于 2012-11-06T11:11:37.707 に答える
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

次のように配列を初期化します。

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

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

    }
于 2012-11-06T11:13:19.373 に答える
0

配列を初期化すると、null 値の n2 * n2 マトリックスが含まれます。

PointerCoords実際に配列内のオブジェクトのプロパティを設定できるようにするには、最初に行う必要があります

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