如何求矩阵中次对角线的和(JAVA)

如何求矩阵中次对角线的和(JAVA),java,arrays,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 &&am

我试图在矩阵中求次对角线的和,但我的代码只显示矩阵中的第一个数字。有没有办法解决这个问题

//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;
}
//矩阵中次对角线的和
公共静态int-minorDiagonal(int[][]数组){
int k=0,j=0;
int sumMinD=0;
k=数组长度-1;
对于(j=0,k=0;j=0;j++,k--){
sumMinD+=数组[j][k];
}
返回总和;
}

为什么在这行中将k设置为0

for ( j = 0, k = 0; j <= array.length && k >= 0; j++, k--)
for(j=0,k=0;j=0;j++,k--)
它将为循环运行一次,因为第一次之后k将为-1。所以

k>=0

这将是错误的


我认为您必须删除k=0部分。

考虑您有以下矩阵:

1 25

413

09 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];
}

矩阵的次对角线与主对角线一样,穿过中心对角线。但是小对角线从右上角延伸到左下角。假设您有一个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];
}
int-sumMinD=0;
int k=Math.min(array.length,数组[0].length);
对于(int i=0;i
我使用
Math.min
来计算小对角线的长度时,找出行或列长度中较小的一个。这涵盖了高度和宽度可能不相等的矩形矩阵的边缘情况


此代码仅在行等于或小于列时有效。我试着用3x2运行它,它给了我一个越界异常。@Jasminegomezferer我更新了我的答案以覆盖非平方矩阵。看一下演示。
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];
}