0

こんにちは、私は学校向けの小さなゲームを作成していますが、この配列のx変数とy変数を入力するためにこれを実行しようとすると、NPEが取得されます。誰か助けてもらえますか?

public class mainclass {
    public static void main(String[] args) {
        Gra piece[] = new Gra[10];

        for (int i = 0; i < piece.length; i++) {
            piece[i].x = 50;
            piece[i].y = 50;
        }
    }
}

class Gra{
    public int x = 50;
    public int y = 10;
}
4

5 に答える 5

12
Gra piece[] = new Gra[10];

配列内のオブジェクトを初期化せず、配列を作成するだけなので、コンストラクターを呼び出してGrasを作成します。

for (int i = 0; i < piece.length; i++) {
   piece[i] = new Gra();
   piece[i].x = 50;
   piece[i].y = 50;
}
于 2013-01-29T06:21:50.913 に答える
3

ステートメント

Gra piece[] = new Gra[10];

アレイを初期化するだけです。Graオブジェクトは作成されません。

内部ではfor loop、コンストラクターを次のように呼び出す必要があります。

for (int i = 0; i < piece.length; i++) {
    piece[i] = new Gra();
    piece[i].x = 50;
    piece[i].y = 50;
}

また、についてもっと読むencapsulation。そのbad idea作るためにinstance variables public

于 2013-01-29T06:25:01.717 に答える
1

初期化gra arrayしたが作成しなかったObjectため、配列内にオブジェクトはなく、デフォルトではnullが初期化されているため、piece[i].x実際null.xにはNPEがスローされます。

    Gra piece[] = new Gra[10];
    for (int i = 0; i < piece.length; i++) {
        piece[i] = new Gra();
        piece[i].x = 50;
        piece[i].y = 50;
    }
于 2013-01-29T06:22:00.487 に答える
0

10個の要素を持つGraの配列を作成しました。

Gra piece[] = new Gra[10];

しかし、その配列の各要素は現在nullを指しています。

ObjectのJavaのデフォルト値はnullであるため、これらの個々の要素を初期化する必要があります。

于 2013-01-29T06:22:46.067 に答える
0

GraBy型の配列を作成しているだけだから

Gra piece[] = new Gra[10];

したがって、デフォルトではこれはですnull

したがって、最初に次のように初期化します

for (int i = 0; i < piece.length; i++) {
       pirce[i] =  new Gra();
    }

その後、

    for (int i = 0; i < piece.length; i++) {
        piece[i].x = 50;
        piece[i].y = 50;
    }
于 2013-01-29T06:23:36.047 に答える