创建TicTacToe类二维数组时触发NullPointerException的解决求助
问题原因
你触发NullPointerException的核心原因是:创建TicTacToe[][] ultGame = new TicTacToe[3][3];时,仅初始化了二维数组的容器结构,数组内的每个ultGame[a][b]元素默认都是null,没有实际创建TicTacToe对象实例,直接调用printBoard()自然会触发空指针异常。
你尝试方法的问题分析
- 方法1:
game[][] ultGame是语法错误,Java数组声明必须明确指定类型(即TicTacToe[][]),不能用变量名代替类型,所以编译器报错无法识别game。 - 方法2:你发现元素都是
null是正确的,但没有针对这个问题做修复(即实例化对象),所以问题依旧。 - 方法3:
ultGame[a][b].equals(null)本身会触发空指针——因为null对象无法调用任何方法(包括equals),正确的判空方式应该是ultGame[a][b] == null。
正确解决方案
在调用printBoard()之前,先为数组的每个元素实例化TicTacToe对象,修改后的主方法代码如下:
public class MyProgram { public static void main(String[] args) { TicTacToe[][] ultGame = new TicTacToe[3][3]; for(int a = 0; a < 3; a++) { for(int b = 0; b < 3; b++) { // 先实例化TicTacToe对象 ultGame[a][b] = new TicTacToe(); ultGame[a][b].printBoard(); } System.out.println(); } } }
替代实现方式
如果你想在声明数组时直接完成对象初始化,可以用数组初始化器:
public class MyProgram { public static void main(String[] args) { // 直接初始化每个位置的TicTacToe对象 TicTacToe[][] ultGame = { {new TicTacToe(), new TicTacToe(), new TicTacToe()}, {new TicTacToe(), new TicTacToe(), new TicTacToe()}, {new TicTacToe(), new TicTacToe(), new TicTacToe()} }; for(int a = 0; a < 3; a++) { for(int b = 0; b < 3; b++) { ultGame[a][b].printBoard(); } System.out.println(); } } }
内容的提问来源于stack exchange,提问作者Keagran
相关产品推荐
相关产品推荐

