java - 如何在Java中递归计算二维数组列

标签 java recursion multidimensional-array sum

我被一个相当愚蠢的家庭作业问题困住了。

任务是找到二维数组上最小的列和并返回它的索引。不允许循环,只能递归。

我管理了代码,但我仍坚持计算列本身的简单任务。

这是我到目前为止编写的代码:

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

我不知道我的错误在哪里。

最佳答案

从你的帖子中我可以看到,有两个问题。

首先,当您计算列的总和时,您仅检查列索引是否小于外部矩阵的长度,但这是行数,而不是列数。

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

第二个是,当您发现一列的总和大于您之前存储的总和时,您只更新 colIndex,而不更新存储总和实际值的 maxcol 变量

if (tempCol > maxCol)
            colIndex=j;

关于java - 如何在Java中递归计算二维数组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59932233/

相关文章:

java - 使用 java Files.walk 仅从根文件夹获取文件名并跳过其子目录时出现问题

java - drive.changes().watch 返回 GoogleJsonResponseException : 401 Unauthorized without any message

java - 在 naughts 和 crosses 的 minimax 算法中,节点存储为什么?

arrays - 以预期格式打印 JSON 数组

c# - 多维数组在隐式定义时是否填充了空值?

python - Python 中是否有等同于 R apply 函数的函数?

java - C# 相当于 java Class<E> 和 E extends Enum<E>

java - 物化和交易

powershell - 嵌套循环抽象

Javascript菜单递归函数错误