无法在 Java 中存储对象数组长度
Unable to store object array length in Java
我正在学习基础知识 Java,我在对象数组方面遇到了一些麻烦。
此代码的一些背景知识:我有一个单独的 class 称为 Point1,它是笛卡尔平面上的一个简单点,与此问题相关的属性是:
- 2个私有整型变量_x和_y表示点对应坐标
- 带有 _x 和 _y 参数的构造函数,例如:
Point1 a = new Point1(0,0)
- Public设置x和y值的方法:
a.setX(int x); a.setY(int y);
我现在被要求创建一个 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。因此,解决方法可以是
-> 用一些大小而不是默认值初始化您的实例变量。
或
-> 在函数内初始化数组。
我正在学习基础知识 Java,我在对象数组方面遇到了一些麻烦。
此代码的一些背景知识:我有一个单独的 class 称为 Point1,它是笛卡尔平面上的一个简单点,与此问题相关的属性是:
- 2个私有整型变量_x和_y表示点对应坐标
- 带有 _x 和 _y 参数的构造函数,例如:
Point1 a = new Point1(0,0)
- Public设置x和y值的方法:
a.setX(int x); a.setY(int y);
我现在被要求创建一个 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。因此,解决方法可以是
-> 用一些大小而不是默认值初始化您的实例变量。
或
-> 在函数内初始化数组。