3

这是一个关于的问题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 中的异常

4

2 回答 2

6

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

于 2013-04-15T23:13:59.180 回答
2

您需要初始化每个Pieces. 在您的内部for循环中添加一行:

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

此外,您的数组将超出界限,要么声明更多,要么Pieces削减两个循环的 1 次迭代for

于 2013-04-15T23:12:44.127 回答