如何在函数中用对象填充数组,而我在 main 函数中声明了这个数组?

How to fill an array with objects in a function whereas I declared this array in the main function?

当我试图在一个函数中用对象填充一个数组时,即使在主函数中预先声明了这个数组,我总是会得到一个错误。我也是OOP的初学者。

这是我的观点class :

public class Point {
    private int positionX;
    private int positionY;

    public Point(int positionX, int positionY) {
        this.positionX = positionX;
        this.positionY = positionY;
    }

    public int getPositionX() {
        return positionX;
    }

    public void setPositionX(int positionX) {
        this.positionX = positionX;
    }

    public int getPositionY() {
        return positionY;
    }

    public void setPositionY(int positionY) {
        this.positionY = positionY;
    }
}

这是我的主要 class :

public class Main {

    public static void setupPointArray(Point ptArr[]) {
        ptArr = new Point[] {new Point(2, 3),
                             new Point(4, 1),
                             new Point(6, 2)};
    }

    public static void main(String[] args) {
        Point pointArray[] = new Point[3];
        setupPointArray(pointArray);

        System.out.println(pointArray[0].getPositionX() + pointArray[0].getPositionY());
        System.out.println(pointArray[1].getPositionX() + pointArray[1].getPositionY());
        System.out.println(pointArray[2].getPositionX() + pointArray[2].getPositionY());
    }

}

但我在控制台中收到错误消息。

Exception in thread "main" java.lang.NullPointerException
    at fr.antonin.point.Main.main(Main.java:15)

您正在修改局部变量,形式参数。不影响实参

public static void setupPointArray(Point ptArr[]) {
    ptArr = new Point[] {new Point(2, 3),
                         new Point(4, 1),
                         new Point(6, 2)};
}

您可以通过返回您创建的数组或填充您传递的原始数组来解决此问题。例如:

public static Point[] setupPointArray() {
    return new Point[] {new Point(2, 3),
                         new Point(4, 1),
                         new Point(6, 2)};
}

或者,您可以填充传递的数组 - 如果您确定它的长度:

public static void setupPointArray( Point[] ptArr ) {
    ptArr[0] = new Point(2, 3);
    ptArr[1] = new Point(4, 1);
    ptArr[2] = new Point(6, 2);
}