将对象添加到数组并获取NullPointerException

时间:2015-04-06 02:02:30

标签: java arrays object nullpointerexception

我有一个类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;
        }
    }
}

基本上,我不知道为什么这不起作用,需要一些帮助。

4 个答案:

答案 0 :(得分:0)

因为您没有实例化数组points。你需要像

这样的东西
private Point[] points = new Point[i];

其中i是指定数组长度的整数。否则pointsnull并且会引发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。