繁体   English   中英

java-为什么此for循环会给出nullpointer异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM