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](你应该遵循编码标准并用大写的第一个字母 btw 来命名你的类),你会得到一个数组,其中每个元素都是该类型的默认值(在这种情况下为 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对象是一维数组。它保存point对象引用。您应该创建一个point对象并保存在数组中,例如 -

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

p1[0].x = 1;

对于二维数组 -

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 回答