Получить соседние ячейки в 2D массиве - PullRequest
0 голосов
/ 09 октября 2018

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

Кто-нибудь знает, как изменить мой код для решения этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...