Я пытаюсь написать метод, который получает четыре соседние ячейки в двумерном массиве.Пока что мой метод может это сделать, и он учитывает ячейки, которые проходят вдоль края или находятся в углах.Проблема в том, что происходит сбой, когда массив не имеет одинаковых строк и столбцов.Например, массив 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;
}
Кто-нибудь знает, как изменить мой код для решения этой проблемы?