JAVA将二维数组的对角线写入一维数组

时间:2016-12-14 13:56:12

标签: java multidimensional-array

想要将二维数组(n * n Matrix)的对角线写入一维数组。



1 2 3
4 5 6 => 1 5 9 
7 8 9




    public int[] getDiagonalFromArray(int[][] two_d_array){
    int[] diagonal_array = new int[two_d_array[0].length];   
    int k=0;
    for (int i = 0; i < two_d_array[0].length; i++) {
        for (int j = 0; j < two_d_array[1].length; j++) {
            for (int l = 0; l < two_d_array[0].length; l++) {  
            diagonal_array[k]=two_d_array[i][j];} //HERE SHOULD BE THE ERROR... HOW DO I CYCLE THROUGH THE 1dim "diagonal_array"? 
            }
        }
    return diagonal_array;
}

此方法提供错误的值。

我的这种方法有效,但只打印对角线,而不是将其放入1dim数组中。

    public void getDiagonal(int[][] two_d_array){
    //int[] diagonal_array = new int[two_d_array[0].length];        
    for (int i = 0; i < two_d_array[0].length; i++) {
        for (int j = 0; j < two_d_array[1].length; j++) {

            if (i==j) System.out.print(two_d_array[i][j]+" ");
        }
    }        
}

逻辑区别在哪里?我在第一个方法上尝试了if子句,但它引发了&#34; outofbound&#34; -Exception。

提前致谢。

3 个答案:

答案 0 :(得分:1)

为什么需要多个循环?

for (int i = 0; i < two_d_array[0].length; i++) {  
    diagonal_array[i]=two_d_array[i][i];
}

似乎对我来说足够了。

答案 1 :(得分:0)

如果您的矩阵具有相同的宽度和高度,这是一个解决方案:

public int[] getDiagonal(int[][] two_d_array){
int[] diagonal_array = new int[two_d_array.length];        
for (int i = 0; i < two_d_array.length; i++) {
    diagonal_array[i] = two_d_array[i][i];
} 
return diagonal_array;

答案 2 :(得分:0)

在这里,我将主要对角元素视为元素Diagonal Elements的集合,其中n&amp; m分别是行数和列数(每行?)。

因此,对角元素的数量永远不会大于min(numOfRows, numOfColumns)

所以,你总是可以尝试:

public int[] getDiagonalFromArray(int[][] 2DArray){
    int[] diagonalArray = new int[Math.min(2DArray.length, 2DArray[0].length]);
    int k=0;
    for (int i = 0; i < 2DArray.length && k < diagonalArray.l length; ++i) {
          for (int j = 0; j < 2DArray[i].length && k < diagonalArray.l length; ++j) {
                if (i == j) {
                     diagonalArray[k++]=2DArray[i][j];
                }
          }
    }
    return diagonalArray;
}

进行一些界限检查以获得良好的衡量标准。

您的输入矩阵必须至少为矩形(方形最有意义),否则代码将表现得不可靠。

这与@ Andreas' answer相同,但为了理解,我牺牲了表现和简洁。