我对一个相当愚蠢的事情有一个家庭作业问题。

任务是在2D数组中找到最小的列总和并返回其索引。不允许循环,只能递归。

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

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

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中计算RECURSIVELY 2D数组列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59932233/

10-11 22:09
查看更多