简化Java

时间:2016-11-28 04:50:01

标签: java if-statement multidimensional-array

我有一系列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简化/压缩这些语句?

6 个答案:

答案 0 :(得分:43)

简单地绕过你关心的位置。跳过"框的中心"。

提示:您可以按行然后列或[y][x]访问2D数组(至少,您是如何通过查看码)。

// 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;
        }
    }
}

注意 - 未处理超出范围的异常

答案 1 :(得分:13)

以下将是更直观的等效物,可轻松扩展到其他感兴趣区域的形状。注意三元运算符?:,它们是Java中将bool转换为整数的必要条件。

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);

答案 2 :(得分:10)

除了您已有的答案之外,您还可以使用增强型for循环(并重复使用范围,因为两者都相同)。

int[] range = { -1, 0, 1 };
for (int i : range) {
  for (int j : range) {
    if ((i != 0 || j != 0) && board[i][j])  { 
      ar++;
    }
  }
}

答案 3 :(得分:8)

这段代码应该给出相同的结果(可能你想检查你是否总是在矩阵的范围内

for(int i=-1; i<=1; i++) {
   for(int j=-1; j<=1; j++) {
        if((i != 0 || j != 0) && board[x+i][y+j]) {
           ar++;
        }
   }
}

答案 4 :(得分:5)

您也可以简化如下:

for(int i = x-1;i<=x+1;i++) {
    for(int j=y-1;j<=y+1;j++) { 
        if(i==x && j==y) continue;
        if (board[i][j]) {
           ar+=1;
        }
    }
}

答案 5 :(得分:4)

看起来你正在测试除(x,y)本身之外的周围方块。我会使用循环来维护计数器,并使用额外的步骤来排除(x,y)中心单元格。

for (int xTest = x - 1; xTest <= x + 1; xTest++) {
    for (int yTest = y - 1; yTest <= y + 1; yTest++) {
        if (xTest == x && yTest == y) {
            continue;
        }
        if (board[xTest][yTest]) {
            ar += 1;
        }
    }           
}

另外,请注意== true是不必要的。布尔语句是Java中的一等公民。