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].xor时,这会引发p[i].y

这是我学习 Java 的第一天,通过 Google 和 StackOverflow 进行了一些研究,但没有发现任何触及问题核心的东西。

4

2 回答 2

8

您得到的NullPointerException异常是由这一行引起的:

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

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

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

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

问题是当你初始化数组时,你没有初始化数组的元素。

在这条线上你有

point[] p = new point[points];

所以现在, p 被初始化为一个长度为点的数组points

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

你正在做相当于

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