我有一个类ConvexHull,我必须为我的班级实现。其中一个实例变量是一个包含对象Points的数组。
private Points[] points;
当我在构造函数中向数组添加Point时,我给出了NullPointerException。
public ConvexHull(int n) throws IllegalArgumentException
{
if (n < 1)
throw new IllegalArgumentException();
else {
Random rand = new Random();
for (int i=0; i<n; i++)
{
int x = rand.nextInt(101)-50;
int y = rand.nextInt(101)-50;
Point p = new Point(x,y);
this.points[i] = p; // NullPointerException is thrown.
this.numPoints = points.length;
}
}
}
基本上,我不知道为什么这不起作用,需要一些帮助。
答案 0 :(得分:0)
因为您没有实例化数组points
。你需要像
private Point[] points = new Point[i];
其中i是指定数组长度的整数。否则points
为null
并且会引发NullPointerException
。
顺便说一下,我认为没有一个名为Points
的班级。如果你创建了自己的类(事实上你可能不需要),不要使用复数名词来命名。
答案 1 :(得分:0)
请为
分配内存private Points[] points;
像这样......
public ConvexHull(int n) throws IllegalArgumentException
{
if (n < 1)
throw new IllegalArgumentException();
else {
points=new Points[n]; //this is the line that is added
Random rand = new Random();
for (int i=0; i<n; i++)
{
int x = rand.nextInt(101)-50;
int y = rand.nextInt(101)-50;
Point p = new Point(x,y);
this.points[i] = p; // NullPointerException is thrown.
this.numPoints = points.length;
}
}
}
答案 2 :(得分:0)
是的,你的代码的问题是你已经声明了数组,但你没有像
那样初始化数组points = new Point[sizeOfYourArray];
它应该解决你的问题,因为首先没有什么可以开始,所以当你初始化它应该没问题。
答案 3 :(得分:0)
你没有像pointer p = new pointer();
这样的字段“指针”新对象,所以你会得到一个NullPointerException。