我在做一个生活游戏,我用这个方法找到附近的邻居
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;
}我觉得它是可怕的编码和畏缩,因此我的问题是..有什么办法让这件事更好吗?现在,它“有点-”工作,但我在想,如果我可以用一个循环来代替。
谢谢。
发布于 2014-11-24 16:14:59
那么,您可以使用循环并显式地排除位置本身(即,当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++)https://stackoverflow.com/questions/27109130
复制相似问题