Как суммировать соседние значения вокруг заданного местоположения в 2D-массиве (матрице)? - PullRequest
0 голосов
/ 07 мая 2019
int[][] array = new int[][]  { { 1, 2, 3 },
                               { 5, 6, 7 },
                               { 9, 0, 1 } 
                             };

Учитывая этот 2D-массив и местоположение, например: [0][2] или 3, какой тип алгоритма я могу использовать для циклов, чтобы получить сумму смежных элементов. Это должно быть 3 + 2 + 6 + 7 = 18. Границы имеют значение, но я в основном заинтересован в суммировании.

1 Ответ

2 голосов
/ 07 мая 2019
private static final int X_SIZE = 3;
private static final int Y_SIZE = 3;
private static int sumAdj(int x, int y, int[][] array) {
    int sum = 0;
    for (int i = Math.max(x-1, 0); i <= Math.min(x+1, X_SIZE -1); i++) {
        for (int j = Math.max(y-1, 0); j <= Math.min(y+1, Y_SIZE-1); j++) {
            sum += array[i][j];
        }
    }
    return sum;
}

По сути, вы хотите зациклить квадрат, центром которого является указанная вами точка, это означает, что min x - это x-1 вашего центра, а max x - это x + 1 вашего центра, то же самое для y. Я использую Math.min и Math.max, чтобы учесть границы, вы можете определить ваши минимальные и максимальные координаты вне цикла for, используя операторы if, но я считаю этот способ более элегантным.

...