如何将这4个循环功能简化为1个功能?

问题描述

我在做运动。一个int [8] [8]象棋网格。我必须找出白色是否可以带黑色。 输入为:(小写字母=黑色,大写字母=白色)

tc.drf.t
ppp.pppp
...p...c
.....f..
..C..P..
..P.D.P.
PP.....P
T.F.RFCT

对于qeen / tower,我使用了一个循环来检查每个方向(上/下/左/右),现在有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 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 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是相同的,其他两种方法也一样。如果唯一的区别是传递给该方法的参数值,则不需要两个方法执行相同的操作:您可以将两个方法归为一个,并使用适当的值进行调用。

,

每种方法的逻辑都是相同的,只是行走的方向不同。因此,通过将其作为参数传递,您可以对所有方向重复使用相同的方法:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="demo">default</div>
<select id="brand"></select>
<button>Reset to "default"</button>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...