嗨,我正在为学校创建一个小游戏,但是当我尝试这样做以填写此数组中的x和y变量时,我得到一个NPE。 有人可以帮忙吗?
public class mainclass {
public static void main(String[] args) {
Gra piece[] = new Gra[10];
for (int i = 0; i < piece.length; i++) {
piece[i].x = 50;
piece[i].y = 50;
}
}
}
class Gra{
public int x = 50;
public int y = 10;
}
答案 0 :(得分:11)
Gra piece[] = new Gra[10];
不初始化数组中的对象,它只创建数组,所以调用构造函数来创建Gra
s
for (int i = 0; i < piece.length; i++) {
piece[i] = new Gra();
piece[i].x = 50;
piece[i].y = 50;
}
答案 1 :(得分:3)
声明
Gra piece[] = new Gra[10];
只会初始化数组。它不会创建Gra
个对象。
在for loop
内,你仍然需要将构造函数称为
for (int i = 0; i < piece.length; i++) {
piece[i] = new Gra();
piece[i].x = 50;
piece[i].y = 50;
}
另外,请阅读有关encapsulation
的更多信息。它是bad idea
instance variables public
。
答案 2 :(得分:1)
您已初始化gra array
,但您没有创建Object
,因此数组中没有Object,默认情况下会初始化null,因此piece[i].x
实际上是null.x
抛出NPE。
Gra piece[] = new Gra[10];
for (int i = 0; i < piece.length; i++) {
piece[i] = new Gra();
piece[i].x = 50;
piece[i].y = 50;
}
答案 3 :(得分:0)
您已经创建了一个包含10个元素的Gra数组。
Gra piece[] = new Gra[10];
但该数组中的每个元素当前都指向null。
您需要初始化这些单独的元素,因为Java的Object默认值为null。
答案 4 :(得分:0)
因为您只是创建类型Gra
按
Gra piece[] = new Gra[10];
因此默认情况下为null
。
首先将它们初始化为
for (int i = 0; i < piece.length; i++) {
pirce[i] = new Gra();
}
然后做
for (int i = 0; i < piece.length; i++) {
piece[i].x = 50;
piece[i].y = 50;
}