我正在用Java编写程序,我在其中定义了一个类
class Point
{
double x;
double y;
}
然后在一个方法中,我定义了一个点数组,如下所示:
Point[] line = new Point[6];
在同一方法中,我有一行
line[SampleSize - i + 1].x = i;
第一次触发此语句时,其数组索引的值为1; 但是程序此时抛出一个空指针异常。
这似乎是索引对象内部字段的正确方法 对象数组。我做错了什么?
提前感谢任何建议。
John Doner
答案 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