public class example
{
static class point
{
int x;
int y;
}
static void main(String args[])
{
point p = new point();
point[] p1 = new point[5];
point[][] p2 = new point[5][5];
p.x = 5; //No problem
p[0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException
p[0][0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException
}
如何初始化p []。x和p [] []。x?
答案 0 :(得分:5)
如果需要多层次,您需要手动初始化整个阵列和所有级别:
point[] p1 = new point[5];
// Now the whole array contains only null elements
for (int i = 0; i < 5; i++)
p1[i] = new point();
p1[0].x = 1; // Will be okay
答案 1 :(得分:2)
以这种方式思考;当你执行new point[5]
时(你应该遵循编码标准并用大写的第一个字母btw来命名你的类)。你会得到一个数组,其中每个元素都是该类型的默认值(在这种情况下null)。数组是初始化的,但是如果你想要初始化数组的各个元素,你也必须这样做,或者在这样的初始行中:
point[] p1 = new point[] { new point(), new point() };
(上面的方法将创建一个数组,每个元素已经初始化了最小尺寸,以适应这些元素 - 在本例中为2。)
或者通过循环遍历数组并手动添加点:
point[] p1 = new point[5];
for (int i = 0; i < p1.length; i++) {
point[i] = new point();
}
这两个概念都可以扩展到多维数组:
point[] p2 = new point[][] {
new point[] { new point(), new point() }
new point[] { new point(), new point() }
};
或者
point[] p2 = new point[5][5];
for (int i = 0; i < p2.length; i++) {
for (int j = 0; j < p2[i].length; j++) {
p2[i][j] = new point();
}
}
答案 2 :(得分:0)
point p = new point();
这是point
对象。
point[] p1 = new point[5];
此point
对象是一维数组。它包含point
个对象引用。您应该创建一个point
对象并像 -
for (int i = 0; i < 5; i++)
p1[i] = new point();
p1[0].x = 1;
对于2D阵列 -
point[][] p2 = new point[5][5];
for (int i = 0; i < 5; i++){
for (int j = 0; j < 5; j++)
p1[i][j] = new point();
}
p[0][0].x = 5;
答案 3 :(得分:0)
构造对象数组时,构造数组本身,但将各个元素初始化为null。所以,假设Point()
是你想要的构造函数,
Point[] p1 = new Point[5];
for (int i = 0; i < p1.length; ++i) {
p1[i] = new Point();
}