我有个练习。一个int[8][8]象棋格。我得看看白人能不能打败黑人。输入为:(lowercaps=黑色,upper=白色)
tc.drf.t
ppp.pppp
...p...c
.....f..
..C..P..
..P.D.P.
PP.....P
T.F.RFCT
对于qeen/towers,我使用了一个循环来检查每个方向(top/bottom/left/right),现在有4个简单的循环函数,看起来差不多。我想只有一个功能,但无法找到如何。你知道吗?
static boolean attackRowRt(String[] board, int y, int fromX){
for(int x=fromX+1; x<=7; x++){
char attacked = board[y].charAt(x);
if(attacked == '.') continue;
return Character.isLowerCase(attacked);
}
return false;
}
static boolean attackRowLt(String[] board, int y, int fromX){
for(int x=fromX-1; x>=0; x--){
char attacked = board[y].charAt(x);
if(attacked == '.') continue;
return Character.isLowerCase(attacked);
}
return false;
}
static boolean attackColBtm(String[] board, int x, int fromY){
for(int y=fromY+1; y<=7; y++){
char attacked = board[y].charAt(x);
if(attacked == '.') continue;
return Character.isLowerCase(attacked);
}
return false;
}
static boolean attackColTop(String[] board, int x, int fromY){
for(int y=fromY-1; y>=0; y--){
char attacked = board[y].charAt(x);
if(attacked == '.') continue;
return Character.isLowerCase(attacked);
}
return false;
}
2条答案
按热度按时间ercv8c1e1#
您的四个方法都共享三行代码,这些代码可以提取到一个单独的方法中,您可以从当前方法中调用该方法(如果将比较与
attacked
). 因此,基本上有一个单独的方法来执行以下操作,并从您的方法中调用它:此外,您的方法成对相等:
attackColTop()
以及attackRowLt
是一样的,其他两种方法也是一样的。如果唯一的区别是传递给方法的参数的值不同,则不需要两个方法做相同的事情:可以将两个方法都包含到一个方法中,然后用适当的值调用它。35g0bw712#
每种方法的逻辑都是一样的,只是走的方向不同。因此,通过将其作为参数传递,您可以对所有方向重复使用相同的方法: