此课程用于在游戏中存储和处理棋盘。
static class Board
{
boolean[][] array;
private void reset()
{
array = new boolean[][]
{
{false, false, false},
{false, false, false},
{false, false, false}
};
}
private void mark(int row, int col)
{
array[row][col] = true;
}
}
这是主要方法。
public static void main(String args[])
{
new Board().reset();
new Board().mark(0,0);
}
程序启动时,我使用reset方法初始化电路板。 然后,我使用“mark”将其中一个布尔值从false更改为true。
我在array[row][col] = true;
得到一个空异常错误,因为该数组为空。
如何编辑代码以使数组不会变为null并且mark()可以正确地将值写入数组?
答案 0 :(得分:3)
不要创建Board
的两个实例。创建一个实例并在同一个isntance上调用这两个方法。
public static void main(String args[])
{
Board board = new Board();
board.reset();
board.mark(0,0);
}
为每个方法调用创建新的Board
实例时,会对mark
成员未初始化的实例执行array
方法,从而导致NullPointerException
。
答案 1 :(得分:2)
这是因为您在mark
的{{1}}新实例中调用Board
,array
初始化为null
值。您必须重用相同的实例来调用这两个方法:
public static void main(String args[]) {
Board board = new Board();
board.reset();
board.mark(0,0);
}
答案 2 :(得分:0)
不要通过调用构造函数new Board()
来创建新对象
每一次。只创建一个对象,然后重用它。似乎是
你的意图在这里。
Board obj = new Board();
obj.reset();
obj.mark(0,0);