为什么这个 for 循环会给出空指针异常


嗨,我

正在为学校创建一个小游戏,但是当我尝试这样做以填充此数组中的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;
    }

最新更新