简化 Java 中连续的 “if” 语句

我有一系列声明,如下所示:if

if (board[x+1][y]==true) {
    ar+=1;
}
if (board[x][y+1]==true) {
    ar+=1;
}
if (board[x-1][y]==true) {
    ar+=1;
}
if (board[x][y-1]==true) {
    ar+=1;
}
if (board[x+1][y+1]==true) {
    ar+=1;
}
if (board[x+1][y-1]==true) {
    ar+=1;
}
if (board[x-1][y+1]==true) {
    ar+=1;
}
if (board[x-1][y-1]==true) {
    ar+=1;
}

有没有办法用Java简化/压缩这些语句?


答案 1

只需绕过您关心的位置即可。跳过“框”的中心。

提示:您可以逐行列访问 2D 数组,或者(至少,这就是您通过查看代码来翻译开发板的方式)。[y][x]

// int x, y;  // position to look around 
for (int xDiff = -1; xDiff <= 1; xDiff++) {
    for (int yDiff = -1; yDiff <= 1; yDiff++) {
        if (xDiff == 0 && yDiff == 0) continue;
        if (board[y+yDiff][x+xDiff]) { 
            ar += 1;
        }
    }
}

当心 - 未处理越界异常


答案 2

以下内容将是一个更具视觉性的等效项,可轻松扩展到感兴趣区域的其他形状。注意三元运算符,在 Java 中,将 bools 转换为 ints 是必需的。?:

ar += (board[x-1][y-1]?1:0) + (board[x-1][y]?1:0) + (board[x-1][y+1]?1:0);
ar += (board[x+0][y-1]?1:0) +                       (board[x+0][y+1]?1:0);
ar += (board[x+1][y-1]?1:0) + (board[x+1][y]?1:0) + (board[x+1][y+1]?1:0);

推荐