java - 为什么这个for循环给出了一个nullpointer异常?

时间:2013-01-29 06:19:04

标签: java arrays loops for-loop nullpointerexception

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

5 个答案:

答案 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;
    }