如何在矩阵中找到次要对角线的总和(JAVA)

时间:2017-12-06 01:47:29

标签: java arrays

我试图在矩阵中找到次要对角线的总和,但我的代码只显示矩阵中的第一个数字。有没有办法解决它?

//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;
}

3 个答案:

答案 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来查找行或列长度的较小。这涵盖了矩形矩阵的边缘情况,其中高度和宽度可能不相等。

Demo