0

私はこのようなものを作成できるようにしたいと思います:

int points = 250;

public class point {

    float x, y;

}

point[] p = new point[points];

// constructor
public JavaMain() {

    Random r = new Random();

    for (int i = 0; i < points; i++) {

        int tx = r.nextInt(640) + 1;
        int ty = r.nextInt(480) + 1;

        p[i].x = (float)tx;
        p[i].y = (float)ty;

    }
}

問題は、値をまたはNullPointerExceptionに割り当てようとすると、これがスローされることですp[i].xp[i].y

これは Java の私の最初の日であり、Google と StackOverflow を介していくつかの調査を行いましたが、問題の核心に到達するものは何も明らかになりませんでした。

4

2 に答える 2

8

NullPointerException取得している例外は、次の行が原因です。

p[i].x = (float)tx;

配列内の positionにx格納されているオブジェクトの属性にアクセスしようとしていますが、この要素 (またはこの配列内の他の要素) はまだ設定されておらず、null に等しいです。pi

これを修正するには、上記の行の上に次の行を追加します。

p[i] = new point();
于 2013-07-08T22:39:17.147 に答える
1

問題は、配列の初期化中に、配列の要素を初期化していないことです。

あなたが持っているこの行に

point[] p = new point[points];

したがって、 p は長さを持つポイントの配列に初期化されますpoints

ただし、この配列では、個々のポイント オブジェクトが初期化されていない (すべて null である) ことが想像できます。したがって、呼び出し時p[i].x = (float)tx;に p[i] でポイント オブジェクトを逆参照しますが、p[i] は初期化されていないため、null ポインターを逆参照しています。

あなたは同等のことをしています

point p;
p.x = 5;
于 2013-07-08T22:46:39.407 に答える