我对一个相当愚蠢的事情有一个家庭作业问题。
任务是在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/