2
public class example
{
    static class point
    {
        int x;
        int y;
    }

    static void main(String args[])
    {
        point p = new point();
        point[] p1 = new point[5];
        point[][] p2 = new point[5][5];

        p.x = 5; //No problem
        p[0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException
        p[0][0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException
    }

p[].x と p[][].x を初期化するにはどうすればよいですか?

4

4 に答える 4

5

マルチレベルの場合、配列全体とすべてのレベルを手動で初期化する必要があります。

point[] p1 = new point[5];
// Now the whole array contains only null elements

for (int i = 0; i < 5; i++)
  p1[i] = new point();

p1[0].x = 1; // Will be okay
于 2012-12-04T16:53:30.667 に答える
2

このように考えてください。そうするときnew point[5](コーディング標準に従って、最初の文字を大文字にしてクラスに名前を付ける必要があります)、すべての要素がその型のデフォルト値(この場合はnull)である配列を取得します。配列は初期化されますが、配列の個々の要素を初期化する場合は、次のような最初の行でも同様に行う必要があります。

point[] p1 = new point[] { new point(), new point() };

(上記のメソッドは、各要素がそれらの要素を収容できる最小サイズ (この場合は 2) で既に初期化されている配列を作成します。)

または、配列をループしてポイントを手動で追加します。

point[] p1 = new point[5];
for (int i = 0; i < p1.length; i++) {
   point[i] = new point();
}

これらの概念は両方とも、多次元配列に拡張できます。

point[] p2 = new point[][] {
    new point[] { new point(), new point() }
    new point[] { new point(), new point() }
};

または

point[] p2 = new point[5][5];
for (int i = 0; i < p2.length; i++) {
    for (int j = 0; j < p2[i].length; j++) {
        p2[i][j] = new point();
    }
}
于 2012-12-04T16:58:11.390 に答える
0
 point p = new point();

それはpointオブジェクトです。

point[] p1 = new point[5];

このpointオブジェクトは 1D 配列です。pointオブジェクト参照を保持します。オブジェクトを作成し、point次のように配列に保持する必要があります-

for (int i = 0; i < 5; i++)
  p1[i] = new point();

p1[0].x = 1;

そして2D配列の場合 -

point[][] p2 = new point[5][5];

for (int i = 0; i < 5; i++){
  for (int j = 0; j < 5; j++)
      p1[i][j] = new point();
}
p[0][0].x = 5;
于 2012-12-04T16:54:03.663 に答える
0

オブジェクトの配列を作成すると、配列自体は作成されますが、個々の要素は null に初期化されます。したがって、Point()が必要なコンストラクターであると仮定すると、

Point[] p1 = new Point[5];
for (int i = 0; i < p1.length; ++i) {
  p1[i] = new Point();
}
于 2012-12-04T16:54:56.120 に答える