作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个练习。一个 int[8][8] 国际象棋网格。我必须找出白色是否可以带走黑色。输入是:(小写=黑色,大写=白色)
tc.drf.t
ppp.pppp
...p...c
.....f..
..C..P..
..P.D.P.
PP.....P
T.F.RFCT
对于 qeen/towers,我使用了一个循环来检查每个方向(顶部/底部/左/右),现在有 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;
}
最佳答案
您的所有四个方法共享三行代码,这些代码可以提取到一个单独的方法中,您可以从当前方法中调用该方法(如果您反转与 attacked< 的比较,则可以将其简化为两行代码
)。所以基本上有一个单独的方法来执行以下操作并从您的方法中调用它:
char attacked = board[y].charAt(x);
if(attacked != '.') {
return Character.isLowerCase(attacked);
}
此外,您的方法成对地彼此相等:attackColTop()
和attackRowLt
相同,其他两个方法也相同。如果唯一的区别是您传递给方法的参数的值,则您不需要有两个执行相同操作的方法:您可以将这两个方法归为一个,然后使用适当的值调用它。
关于java - 如何将这 4 个循环函数简化为 1 个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63741507/
我是一名优秀的程序员,十分优秀!