试图创建一个结构化数组Java

时间:2013-07-08 22:37:37

标签: java arrays class nullpointerexception

我希望能够创建这样的东西:

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;

    }
}

问题是,在尝试将值分配给NullPointerExceptionp[i].x

时会引发p[i].y

这是我在Java上的第一天,并通过Google和StackOverflow进行了一些研究,但没有发现任何可以解决问题的核心问题。

2 个答案:

答案 0 :(得分:8)

您获得的NullPointerException例外由此行引起:

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

您尝试访问存储在位置x的{​​{1}}数组内的对象的p属性,但此元素(或此数组中的任何其他元素)尚未已设置并等于null。

要解决此问题,请在上述行上方添加此行:

i

答案 1 :(得分:1)

问题在于,在初始化数组时,您没有初始化数组的元素。

在这一行你有

point[] p = new point[points];

现在,p被初始化为长度为points

的点数组

但是,您可以想象在此数组中,单个点对象未初始化(因此全部为null)。因此,当您调用p[i].x = (float)tx;时,您在p [i]处取消引用点对象,但p [i]未初始化,因此您将取消引用空指针。

你做的相当于

point p;
p.x = 5;