我试图在矩阵中找到次要对角线的总和,但我的代码只显示矩阵中的第一个数字。有没有办法解决它?
//sum of minor diagonal in matrix
public static int minorDiagonal(int[][] array){
int k = 0, j = 0;
int sumMinD = 0;
k = array.length - 1;
for ( j = 0, k = 0; j <= array.length && k >= 0; j++, k--) {
sumMinD += array[j][k];
}
return sumMinD;
}
答案 0 :(得分:1)
考虑你有以下矩阵:
1 2 5
4 1 3
0 9 4
次要对角线由0 + 1 + 5 = 6
组成次要对角线的元素位于: [2] [0] , [1] [1] 和 [0] [2] < /强>
您的代码是:
for ( j = 0, k = 0; j <= array.length && k >= 0; j++, k--) {
sumMinD += array[j][k];
}
您的 k 初始化为零并且您不断减少它,您将获得 ArrayIndexOutOfBounds 例外,将 j 更改为 yourMatrix .length-1 在每次迭代时 j 减少 j - , k 增加 k ++ ,你应该修好它。
你的最终工作循环是:
for ( j = array.length-1, k = 0; j >= 0; j--, k++) {
sumMinD += array[j][k];
}
答案 1 :(得分:0)
为什么在这一行中将k设为0?
for ( j = 0, k = 0; j <= array.length && k >= 0; j++, k--)
它将循环运行一次,因为k在第一次之后将为-1。所以
k&gt; = 0
将是假的。
我认为你必须删除k = 0部分。
答案 2 :(得分:0)
矩阵的次要对角线,如主要对角线,横跨中心对角线。但是小对角线从右上角到左下角。假设你有一个4x4矩阵,你想总结以下四点:
(0, 3)
(1, 2)
(2, 1)
(3, 0)
将其转换为循环为我们提供以下内容:
int sumMinD = 0;
int k = Math.min(array.length, array[0].length);
for (int i=0; i < k; ++i) {
sumMinD += array[i][k - 1 - i];
}
在确定次要对角线的长度时,我使用Math.min
来查找行或列长度的较小。这涵盖了矩形矩阵的边缘情况,其中高度和宽度可能不相等。