【发布时间】:2019-02-06 21:07:51
【问题描述】:
对于大学的一个项目,我必须创建一个井字游戏。
我有这个带有if 语句的for 循环来搜索3x3 大小的二维数组,如果它是X 或O(枚举)则返回。这会显示哪一方赢得了比赛。
但是,我遇到的问题是,如果二维数组不完整,例如所有 9 个框都没有填充X 或O,则该方法显示NullPointerException。
编辑:我必须补充一点,我要求空网格为null,因为很少有其他单元测试假设grid[][] 被初始化为null。
错误:
Exception in thread "main" java.lang.NullPointerException
at TicTacToeImplementation.whoHasWon(TicTacToeImplementation.java:80)
at ApplicationRunner.main(ApplicationRunner.java:24)
代码:
public enum Symbol {
X, O
}
private Symbol winner;
public Symbol whoHasWon() {
for (Symbol xORo : Symbol.values()) {
if ((grid[0][0].equals(xORo) &&
grid[0][1].equals(xORo) &&
grid[0][2].equals(xORo))) {
winner = xORo;
isGameOver = true;
break;
} else if ((grid[1][0].equals(xORo) &&
grid[1][1].equals(xORo) &&
grid[1][2].equals(xORo))) {
winner = xORo;
isGameOver = true;
break;}
else if { //Code carries on to account for all 8 different ways of winning
} else {
isGameOver = true;
}
}
return winner;
}
【问题讨论】:
-
grid在哪里初始化?但是,由于可以(并且应该)使用==比较枚举值,请将代码更改为grid[0][0] == xORo,因此空白(又名null)单元格将比较为假,而不是抛出 NPE。 -
您可以在equals方法之前检查是否为null。其他方法是用任何其他字符逗号点 exc 填充所有行。
标签: java for-loop arraylist nullpointerexception 2d