Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生活游戏:寻找邻居_Java_Conways Game Of Life - Fatal编程技术网

Java 生活游戏:寻找邻居

Java 生活游戏:寻找邻居,java,conways-game-of-life,Java,Conways Game Of Life,我正在做一个生活游戏,我用这个方法寻找附近的邻居 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)){ neighb

我正在做一个生活游戏,我用这个方法寻找附近的邻居

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时):


更适合codereview.stackexchange。com@Jon斯基特回答得对。然而,如果你开始有一个大的字段,你原来的方法会执行得更快,因为你基本上展开了循环,循环展开总是比循环快。我会使用类似于
offset=newint[]{-1,0,1}
for(int-xOffset:offset){…}
@njzk2:这也可以,是的。
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;
}
private static final int[] OFFSETS = { -1, 0, 1 };
...
for (int xOffset : OFFSETS)