0

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

5 回答 5

12
Gra piece[] = new Gra[10];

不初始化数组内部的对象,只创建数组,所以调用构造函数创建Gras

for (int i = 0; i < piece.length; i++) {
   piece[i] = new Gra();
   piece[i].x = 50;
   piece[i].y = 50;
}
于 2013-01-29T06:21:50.913 回答
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

于 2013-01-29T06:25:01.717 回答
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;
    }
于 2013-01-29T06:22:00.487 回答
0

您已经创建了一个包含 10 个元素的 Gra 数组。

Gra piece[] = new Gra[10];

但是该数组中的每个元素当前都指向 null。

您需要初始化这些单独的元素,因为 Java 的 Object 的默认值为 null。

于 2013-01-29T06:22:46.067 回答
0

因为您只是在创建GraBy类型的 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;
    }
于 2013-01-29T06:23:36.047 回答