Как рассчитать рекурсивно 2D столбец массива в Java - PullRequest
0 голосов
/ 27 января 2020

Я застрял с вопросом домашней работы по поводу чего-то довольно глупого.

Миссия - найти наименьшую сумму столбца в двумерном массиве и вернуть его индекс. Циклы не допускаются, только рекурсия.

Я справился с кодом, но я застрял с простой задачей вычисления самого столбца.

Это код, который я написал до сих пор:

public static int maxSumCol(int[][] a) {
        int maxCol=calculateCol(a, 0, 0);
        int colIndex=0;
        return maxSumCol(a, 0, 0, maxCol, colIndex);
    }
    private static int maxSumCol(int[][] a, int i, int j, int maxCol, int colIndex) {
        if (j<a.length){
            int tempCol=calculateCol(a, i, j);
            if (tempCol > maxCol)
                colIndex=j;
            return maxSumCol(a, i, j+1, maxCol, colIndex);   
        }
        return colIndex;
    }

И этот метод, который я построил для вычисления суммы столбца:

   private static int calculateCol(int[][] a, int row, int col){
         if (row<=a.length-1)
             return a[row][col] + calculateCol(a, row+1, col);
         return 0;
    }

К сожалению, я получаю ArrayIndexOutOfBoundsException каждый раз, когда я запускаю код.

Я не могу понять, где моя ошибка.

1 Ответ

1 голос
/ 27 января 2020

Что я вижу из вашего поста, есть две проблемы.

Во-первых, когда вы вычисляете сумму столбцов, вы только проверяете, меньше ли индекс столбца, чем длина внешней матрицы, но это количество строк, а не столбцов.

if (j<a.length){
    int tempCol=calculateCol(a, i, j);

Во-вторых, когда вы нашли столбец с большей суммой, чем тот, который вы сохранили ранее, вы обновляете только colIndex, но не переменную maxcol, где хранится фактическое значение суммы

if (tempCol > maxCol)
            colIndex=j;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...