正在为学校创建一个小游戏,但是当我尝试这样做以填充此数组中的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;
}
Gra piece[] = new Gra[10];
不初始化数组中的对象,它只创建数组,因此调用构造函数来创建Gra
for (int i = 0; i < piece.length; i++) {
piece[i] = new Gra();
piece[i].x = 50;
piece[i].y = 50;
}
语句
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
。
您已经初始化了gra array
但没有创建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;
}
你已经创建了一个包含 10 个元素的 Gra 数组。
Gra piece[] = new Gra[10];
但是该数组中的每个元素当前都指向 null。
您需要初始化这些单独的元素,因为 Java 的默认值为 null。
因为你只是在创建 Gra
Array by
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;
}