對於下面代碼(x,y)
尺寸的任何2D陣列cellValues[][]
可用於得到所有8個鄰居的任何細胞(i,j)
。代碼將默認返回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;
}
取決於'//做stuff'是什麼。你能把它全部改爲一行嗎? –
如果一個位置是一個有效的鄰居(達到做東西),它只是將行,列位置添加到列表中。或者更具體地說,創建一個Location(行,列)對象,並將其添加到列表中。 – rhl13
Unsolicited =>我會盡量保持你的代碼正面;意思是否定你的'!'。例如,'if(!((col-1)<0))'變成'if((col-1)> = 0)'。 – ChiefTwoPencils