我正在做一个人生游戏,并且我做了这种方法来寻找附近的邻居
private int getNeighbours(LifeBoard board, int row, int col){
if(board.get(row+1, col)){
neighbours++;
}
if(board.get(row-1, col)){
neighbours++;
}
if(board.get(row, col+1)){
neighbours++;
}
if(board.get(row, col-1)){
neighbours++;
}
if(board.get(row+1, col+1)){
neighbours++;
}
if(board.get(row-1, col-1)){
neighbours++;
}
if(board.get(row+1, col-1)){
neighbours++;
}
if(board.get(row-1, col+1)){
neighbours++;
}
return neighbours;
}
我觉得它的编码似乎很恐怖,因此畏缩,因此我的问题是..有没有办法使它更好?现在,它可以“排序”,但是我在想是否可以使用循环来完成。
谢谢。
最佳答案
好吧,您可以使用循环并仅明确排除位置本身(即x和y偏移量均为0时):
private int getNeighbours(LifeBoard board, int row, int col) {
int neighbours = 0;
for (int xOffset = -1; xOffset < 2; xOffset++) {
for (int yOffset = -1; yOffset < 2; yOffset++) {
if ((xOffset != 0 || yOffset != 0)
&& board.get(row + yOffset, col + xOffset)) {
neighbours++;
}
}
}
return neighbours;
}
假设您的
board.get(...)
方法可以在面板边缘放置值。抵消的替代策略:
for (int xOffset = -1; xOffset < 2; xOffset++)
for (int xOffset = -1; xOffset <= 1; xOffset++)
private static final int[] OFFSETS = { -1, 0, 1 };
...
for (int xOffset : OFFSETS)