Java,使用点数组

时间:2010-10-12 14:56:28

标签: java arrays object

我正在用Java编写程序,我在其中定义了一个类

class Point
{
    double x;
    double y;
}

然后在一个方法中,我定义了一个点数组,如下所示:

Point[]     line = new Point[6];

在同一方法中,我有一行

line[SampleSize - i + 1].x = i;

第一次触发此语句时,其数组索引的值为1; 但是程序此时抛出一个空指针异常。

这似乎是索引对象内部字段的正确方法 对象数组。我做错了什么?

提前感谢任何建议。

John Doner

8 个答案:

答案 0 :(得分:4)

您必须在访问之前初始化该值:

line[SampleSize - i + 1] = new Point();

答案 1 :(得分:4)

那是因为你没有创建要放入数组的点

for (int index = 0; index < line.length; index++)
{
    line[index] = new Point();
}

答案 2 :(得分:4)

Point[]     line = new Point[6];

创建一个空数组,能够保存点数。但是还没有任何对Point的引用。全部都是空的。

line[SampleSize - i + 1].x = i; 

尝试访问x上的null

答案 3 :(得分:3)

只是添加鲍里斯的答案,这里有一些代码

class Point {
    double x;
    double y;
}


Point[] line = new Point[6];
for(int i = 0; i < line.length; i++) {
    line[i] = new Point();
}

    // now you can set the values, since the point's aren't null
line[0].x = 10;
line[0].y = 10;

答案 4 :(得分:2)

http://java.sun.com/docs/books/jls/third_edition/html/arrays.html

如果您在10.2节中注意到,创建数组的行为只是创建引用,而不是对象。因此,您的空指针错误的原因,所有引用都被赋予默认值,在这种情况下为空。

答案 5 :(得分:2)

虽然您已分配数组,但数组的内容为null。你需要做什么:

Point[] line = new Point[6];
for (int i = 0; i < line.length; i++)
{
    line[i] = new Point();
}

答案 6 :(得分:1)

首次创建数组时,它包含六个null引用。

在与数组中的对象进行交互之前,需要创建对象,如下所示:

line[someIndex] = new Point();

您可能希望使用for循环初始化数组中的每个点。

答案 7 :(得分:1)

java具有内置的Point类

import java.awt.Point;

https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html