有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

    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子句,但它引发了“outofbound”异常

提前谢谢


共 (3) 个答案

  1. # 1 楼答案

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

    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. # 2 楼答案

    为什么需要不止一个循环

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

    对我来说似乎足够了

  3. # 3 楼答案

    这里,我认为主对角线元素是元素集合{img1}$,其中^ {CD1>}和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;
    }
    

    为了更好的测量,我们进行了一些边界检查

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

    这与{a1}相同,但为了理解,我牺牲了性能和简洁性