对于大学的一个项目,我必须创建一个Tic Tac Toe游戏。
我有这个for
循环和if
语句来搜索3x3大小的2D数组,并返回是X
还是O
(枚举)。这样可以显示出哪一方赢得了比赛。
但是,我遇到的问题是,如果2D数组不完整,例如9个框都没有用X
或O
填充,则该方法将显示{{1} }。
编辑:我必须补充一点,我要求空白网格为NullPointerException
,因为很少有其他单元测试假定null
初始化为grid[][]
。 / p>
错误:
null
代码:
Exception in thread "main" java.lang.NullPointerException
at TicTacToeImplementation.whoHasWon(TicTacToeImplementation.java:80)
at ApplicationRunner.main(ApplicationRunner.java:24)
答案 0 :(得分:0)
您可以使用多种方法来忽略带有空数组的“空”异常。
第一种方法是用其他默认符号(例如E)填充它。因此,当您在开始时初始化arry时,可以将E填充为空白而不是将其全部设置为空和空。
for(int i=0;i<=2;i++){
for(int k=0;k<=2;k++){
grid[i][k] = "E";
}
}
将其添加到开头,以E的第一个而不是空值填充。
另一种方法是找到如何使用try
或可以在此链接https://www.javacodegeeks.com/2012/06/avoid-null-pointer-exception-in-java.html中找到的以下方法来忽略空值:
因为我相信第一种方法更易于使用和实现,所以我不打算讨论它。但是,根据您对任务的要求,我会同时检查两者以确保。
希望这会有所帮助,祝你好运!
答案 1 :(得分:0)
您可以更改String的比较。代码可能像这样;
public Symbol whoHasWon() {
for (Symbol xORo : Symbol.values()) {
if ((grid[0][0] == xORo.name() &&
grid[0][1] == xORo.name() &&
grid[0][2] == xORo.name())) {
winner = xORo;
isGameOver = true;
break;
} else if ((grid[1][0] == xORo.name() &&
grid[1][1] == xORo.name() &&
grid[1][2] == xORo.name())) {
winner = xORo;
isGameOver = true;
break;}
else if { //Code carries on to account for all 8 different ways of winning
} else {
isGameOver = true;
}
}
return winner;
}
像您实施的枚举
public enum Symbol{
X, O
}
}
答案 2 :(得分:0)
如this中所述,您可以使用equals()
或==
来比较枚举,但使用==
是安全的,而{{1} }不是。
所以基本上,只需像这样写支票即可:
null
但是,如果要使用equals()
方法,则可以编写一种方法检查if (grid[0][0] == xORo &&
grid[0][1] == xORo &&
// etc.
,然后比较两个值并返回结果:
equals()
然后您可以像这样调用null
方法:
public boolean isEqual(Symbol s1, Symbol s2) {
if (s1 != null && s1.equals(s2)) {
return true;
}
return false;
}