gpt4 book ai didi

java - 重构两个相似但值略有不同的 if 循环 (Java)

转载 作者:行者123 更新时间:2023-12-02 12:13:42 26 4
gpt4 key购买 nike

public boolean hasCapturableEnemy(Piece[][] board, int startX, int startY, int endX, int endY) {

//If the Pawn belong to the Upper Team (Faces downward)
if(board[startX][startY] != null && board[startX][startY].getTeam() == Player.UP) {
//If a Piece exists on a diagonally adjacent tile, return true
if(startX - endX == -1 && Math.abs(startY - endY) == 1) {
if( (board[startX + 1][startY - 1] != null && board[startX + 1][startY - 1].getTeam() != Player.UP) ||
(board[startX + 1][startY + 1] != null && board[startX + 1][startY + 1].getTeam() != Player.UP)) {
return true;
}
}
}

if(board[startX][startY] != null && board[startX][startY].getTeam() == Player.DOWN) {
//If the Pawn belongs to the Down Team (Faces upward)

if(startX - endX == 1 && Math.abs(startY - endY) == 1) {
//If a Piece exists on a diagonally adjacent tile, return true
if( (board[startX - 1][startY - 1] != null && board[startX - 1][startY - 1].getTeam() != Player.DOWN) ||
(board[startX - 1][startY + 1] != null && board[startX - 1][startY + 1].getTeam() != Player.DOWN)) {
return true;
}
}
}

return false;

}

我有这个函数,其中包含两个类似的 if 语句,很难重构。

我这样说是因为这两个共享大部分重复代码,但由于 board[startX + 1][startY - 1] 和 board[startX - 1][startY - 1] 等部分略有不同,我发现很难有效地重构它。

换句话说,我当然可以通过创建另一个包含公共(public)部分的函数来重构它,但我担心在该函数内创建更多的 if 循环并使代码变得更脏。

对于重构此类代码有什么建议吗?

最佳答案

只需将乘数变量设置为 1-1(具体取决于“向上”方向),然后在每次偏移“时”乘以该变量X”值。

我认为这样的事情应该有效:

if(board[startX][startY] == null) {
return false;
}

Player player = board[startX][startY].getTeam()
int xOffset = player == Player.UP
? 1
: -1;
//If a Piece exists on a diagonally adjacent tile, return true
if(endX - startX == xOffset && Math.abs(startY - endY) == 1) {
if( (board[startX + xOffset][startY - 1] != null && board[startX + xOffset][startY - 1].getTeam() != player) ||
(board[startX + xOffset][startY + 1] != null && board[startX + xOffset][startY + 1].getTeam() != player)) {
return true;
}
}

您还可以进行一些进一步的重构,在变量中捕获 board[startX + xOffset] 以使事情更加清晰。

关于java - 重构两个相似但值略有不同的 if 循环 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com