如何缩小所有这些 if 语句?
Posted
技术标签:
【中文标题】如何缩小所有这些 if 语句?【英文标题】:How can I shrink down all of these if statements? 【发布时间】:2019-05-10 07:12:26 【问题描述】:这部分代码来自学校作业。我让它工作了,但我觉得我可以简化它,或者至少让它看起来更干净。但是,我还不能这样做。有什么建议? (来自井字游戏)
if (board[0][0] == board[0][1] && board[0][1] == board[0][2] && board[0][0] != '-')
winner = board[0][0];
else if (board[1][0] == board[1][1] && board[1][1] == board[1][2] && board[1][0] != '-')
winner = board[1][0];
else if (board[2][0] == board[2][1] && board[2][1] == board[2][2] && board[2][0] != '-')
winner = board[2][0];
else if (board[0][0] == board[1][0] && board[1][0] == board[2][0] && board[0][0] != '-')
winner = board[0][0];
else if (board[0][1] == board[1][1] && board[1][1] == board[2][1] && board[0][1] != '-')
winner = board[0][1];
else if (board[0][2] == board[1][2] && board[1][2] == board[2][2] && board[0][2] != '-')
winner = board[0][2];
else if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[2][0] != '-')
winner = board[2][0];
else if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')
winner = board[0][0];
【问题讨论】:
尝试对每一行/方向使用方法 你到底是什么意思? 【参考方案1】:试试
if(check(board[0][0],board[0][1],board[0][2]) && board[0][2]!='-')
.....
private boolean check(a,b,c)
return a==b && b==c;
你也可以看到更好的solution here
【讨论】:
对不起,我记错了,让我再想想 不,但喜欢......这不会真的帮助我只是代码? 用一个函数看现在,把函数里的代码挪一下就行了【参考方案2】:这是另一种方法:
int[][] checks = 0,0,0,1,1,0,0,1,2,0,0,1, // horizontals
0,0,1,0,0,1,1,0,0,2,1,0, // verticals
0,0,1,1,2,0,-1,1; // diagonals
char winner = '-';
for (int[] check : checks)
if ((winner = checkWinner(board, check[0], check[1], check[2], check[3])) != '-')
break;
private static char checkWinner(char[][] board, int y, int x, int dy, int dx)
char c = board[y][x];
return (board[y + dy][x + dx] == c && board[y + dy * 2][x + dx * 2] == c ? c : '-');
【讨论】:
【参考方案3】:下面的方法怎么样。如我所见,您的获奖者数量有限:board[0][0]
、board[1][0]
、board[2][0]
、board[0][1]
、board[2][0]
。您可以为每个获胜者创建单独的Predicate
,并使用适当的名称。
Predicate<char[][]> isZeroOneWinner = new Predicate<char[][]>()
@Override
public boolean test(char[][] board)
return board[0][1] == board[1][1] && board[1][1] == board[2][1] && board[0][1] != '-';
;
我认为多个if...else
更好。
【讨论】:
以上是关于如何缩小所有这些 if 语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 DOM 更改为“if/else”语句单独为真,如果所有 if 语句都为真,也将变量设置为真?