[英]java - Why is this for-loop giving a nullpointer exception?
嗨,我正在为学校创建一个小游戏,但是当我尝试执行此操作以填写此数组中的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
s
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
更多信息。 instance variables public
是一个bad idea
。
您已经初始化了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;
}
您创建了一个包含10个元素的Gra数组。
Gra piece[] = new Gra[10];
但是该数组中的每个元素当前都指向null。
您需要初始化这些单独的元素,因为Java的Object的默认值为null。
因为您只是在创建Gra
By类型的Array
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.