【问题标题】:NullPointerException while filling an array填充数组时出现 NullPointerException
【发布时间】:2013-04-08 05:08:06
【问题描述】:

这是一个关于NullPointerException的问题,我要做的是为我的“pieces”数组中的每一块设置一个符号(方法setSymbol存在,并且是char值) 我知道默认情况下这是 null,但是如果我的“设置方法”不起作用,我该如何设置我的数组?

我的代码尽可能简短

    Pieces[][] pzs = new Pieces[7][7];
    int i, j;

    for(i=0;i<8;i++){
        for(j=0;j<8;j++){
            pzs[i][j].setSymbol('X')
        }
    }

我得到了这个例外:

线程“主”java.lang.NullPointerException 中的异常

【问题讨论】:

    标签: java arrays nullpointerexception


    【解决方案1】:

    Pieces[][] pzs = new Pieces[7][7] 生成一个 7 x 7 的数组,其中填充了空值:

    {{null,null,null,null,null,null,null},
     {null,null,null,null,null,null,null},
     {null,null,null,null,null,null,null},
     {null,null,null,null,null,null,null},
     {null,null,null,null,null,null,null},
     {null,null,null,null,null,null,null},
     {null,null,null,null,null,null,null}}
    

    你想做的是这样的:

    Pieces[][] pzs = new Pieces[7][7];
    //no need for int i, j
    for(int i = 0; i < pzs.length; i++){     //pzs.length guarantees you won't get an 
        for(int j = 0; j < pzs[i].length; j++){ //ArrayIndexOutOfBoundsException even if pzs is something different
            pzs[i][j] = new Pieces();
            pzs[i][j].setSymbol('X')
        }
    }
    

    编辑:感谢 Vulpix 建议使用 pzs.length

    【讨论】:

    • 只是添加到@gangqinlaohu 的答案:您可能希望使用pzs.length 而不是7 用于外循环,psz[0].length 用于内循环。
    【解决方案2】:

    您需要初始化每个Pieces。在你的内部for-loop 中添加一行:

    pzs[i][j] = new Pieces();
    

    您的数组也会超出范围,要么声明更多 Pieces,要么削减两个 for-loops 的 1 次迭代。

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2018-08-13
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2016-06-19
      • 1970-01-01
      相关资源
      最近更新 更多