无法在 Java 中存储对象数组长度

Unable to store object array length in Java

我正在学习基础知识 Java,我在对象数组方面遇到了一些麻烦。

此代码的一些背景知识:我有一个单独的 class 称为 Point1,它是笛卡尔平面上的一个简单点,与此问题相关的属性是:

我现在被要求创建一个 class,其中包含作为数组的 Point1 实例,我在使用它时遇到了一些问题。当我使用此代码时:

public class Polygon {
     private int _vertNum;
     private Point1[] _vertex = new Point1[_vertNum];

     public Polygon(int verts) {
         _vertNum = verts;

         for(int i = 0 ; i < verts ; i++) {
             _vertex[i] = new Point1(0,0);
         }
     }
 }

编译正常,但是当我尝试创建 class 的实例时,我收到此消息:java.lang.ArrayIndexOutOfBoundsException: 0

如果我在构造函数中添加数组声明,如下所示:

public class Polygon {
    private int _vertNum;
    private Point1[] _vertex = new Point1[_vertNum];

    public Polygon(int verts) {
        _vertNum = verts;
        Point1[] _vertex = new Point1[_vertNum];

        for(int i = 0 ; i < verts ; i++) {
            _vertex[i] = new Point1(0,0);
        }
    }
} 

我能够创建 class 的实例,但经检查,无论我在构造函数参数中输入什么,它的长度始终为 0。

我的目标是创建一个点数组,其长度由构造函数的参数设置,至少现在,将所有这些点的 x 和 y 坐标设置为 0,0,这样我就不会剩下空对象数组。

我很清楚这可能是一个愚蠢的问题,对于这么长的问题我深表歉意 post - 我会问我的教授,但他有点不讲理,所以我非常感谢您的帮助。提前致谢:)

试试这个。

public class Polygon {
     private int _vertNum;
     private Point1[] _vertex;

     public Polygon(int verts) {
         _vertNum = verts;
         _vertex = new Point1[_vertNum];

         for(int i = 0 ; i < verts ; i++) {
             _vertex[i] = new Point1(0,0);
         }
     }
 }

在您的原始代码中,当 _vertex 被初始化时,_vertNum = 0,您最终得到一个零长度数组。

I'm learning basic Java and I'm having a little trouble with object arrays.

暂时不要将它们视为对象数组。专注于数组的基本概念。数组确实需要有大小并且它们是固定大小的,这意味着一旦定义了它们的大小,您就无法修改它。

private int _vertNum;

private Point1[] _vertex = new Point1[_vertNum];

_vertNum 是一个实例变量,这意味着它将获得默认值,因此作为一个 int,它将获得默认值 0。因此,您将 Point1 数组初始化为 0.

现在,当你这样做时:

_vertex[i] = new Point1(0,0);

您实际上是在尝试将值分配给甚至不存在的索引 0。因此,解决方法可以是

-> 用一些大小而不是默认值初始化您的实例变量。

-> 在函数内初始化数组。