我正在尝试编写一种方法来获取2D数组中的四个相邻单元格。到目前为止,我的方法已经能够做到这一点,并且它可以解决沿边缘延伸或位于角部的单元。问题是,当数组的行和列不相等时,它将失败。例如。数组4x4可以正常工作,但4x5不能正常工作。
一个例子,说我试图找到这个5x6数组的邻居。沿右边缘的任何单元格都不会返回所有邻居。
123456
0
1 x
2
3
4
5
cell (1,6) returns only one neighbor, (1,5)
cell (5,6) returns nothing
我的代码-
public static List<int[]> getNeighbors(int x, int y, int maxX, int maxY) {
List<int[]> neighbors = new ArrayList<int[]>();
if (x > 0) {
int[] neighbour = {x-1, y};
if (neighbour[0] < maxX && neighbour[0] >= 0 && neighbour[1] < maxY && neighbour[1] >= 0) {
neighbors.add(neighbour);
}
}
if (y > 0) {
int[] neighbour = {x, y-1};
if (neighbour[0] < maxX && neighbour[0] >= 0 && neighbour[1] < maxY && neighbour[1] >= 0) {
neighbors.add(neighbour);
}
}
if (x < maxX) {
int[] neighbour = {x+1, y};
if (neighbour[0] < maxX && neighbour[0] >= 0 && neighbour[1] < maxY && neighbour[1] >= 0) {
neighbors.add(neighbour);
}
}
if (x < maxY) {
int[] neighbour = {x, y+1};
if (neighbour[0] < maxX && neighbour[0] >= 0 && neighbour[1] < maxY && neighbour[1] >= 0) {
neighbors.add(neighbour);
}
}
return neighbors;
}
有人知道如何修改我的代码以解决此问题吗?