【问题标题】:java - Why is this for-loop giving a nullpointer exception?java - 为什么这个for循环会给出一个空指针异常?
【发布时间】:2013-01-12 15:55:24
【问题描述】:

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

【问题讨论】:

  • 向我们展示堆栈跟踪。你在哪条线上得到它?

标签: java arrays loops for-loop nullpointerexception


【解决方案1】:
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;
}

【讨论】:

    【解决方案2】:

    你已经初始化了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】:

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

      Gra piece[] = new Gra[10];
      

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

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

      【讨论】:

        【解决方案4】:

        因为您只是在创建Gra 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;
            }
        

        【讨论】:

        • 您不需要两个循环来执行此操作。
        • @tausun 是的,你是对的,但我这样做只是为了更好的解释。
        【解决方案5】:

        声明

        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-07
          • 2011-12-13
          • 2011-04-14
          • 2020-03-13
          相关资源
          最近更新 更多