对于任何一个二维数组cellValues[][]
,其维度为(x,y)
,下列代码可用于获取任何单元格(i,j)
的所有8个邻居。默认情况下,代码将返回0
。
public static ArrayList<Integer> getNeighbors(int i, int j, int x, int y, int[][] cellValues) {
ArrayList<Integer> neighbors = new ArrayList<>();
if(isCabin(i, j, x, y)) {
if(isCabin(i + 1, j, x, y))
neighbors.add(cellValues[i+1][j]);
if(isCabin(i - 1, j, x, y))
neighbors.add(cellValues[i-1][j]);
if(isCabin(i, j + 1, x, y))
neighbors.add(cellValues[i][j+1]);
if(isCabin(i, j - 1, x, y))
neighbors.add(cellValues[i][j-1]);
if(isCabin(i - 1, j + 1, x, y))
neighbors.add(cellValues[i-1][j+1]);
if(isCabin(i + 1, j - 1, x, y))
neighbors.add(cellValues[i+1][j-1]);
if(isCabin(i + 1, j + 1, x, y))
neighbors.add(cellValues[i+1][j+1]);
if(isCabin(i - 1, j - 1, x, y))
neighbors.add(cellValues[i-1][j-1]);
}
return neighbors;
}
public static boolean isCabin(int i, int j, int x, int y) {
boolean flag = false;
if (i >= 0 && i <= x && j >= 0 && j <= y) {
flag = true;
}
return flag;
}
//do stuff
是什么。你能把它都改成一行吗? - Christian Ternus!
。例如,if(!((col-1)<0))
可以改写为if((col-1)>=0)
。 - ChiefTwoPencils