Java。从矩阵(数组)中删除一行

时间:2018-12-10 19:00:02

标签: java

好的,所以我在朋友的帮助下编写了此代码,以“删除”矩阵的行,但是我真的不理解“ for”的含义,有人可以向我解释为什么这样做吗?

编辑:好的,所以我不了解这两个循环的工作方式

public static double [][] removeRow(double [][] m , int n){                             

    double [][] finalm = new double [m.length-1][m[0].length];  

    for (int i = 0; i<finalm.length; i++) {                     

        for (int j = 0; j<finalm[i].length; j++) {              

                if (i<n) {                                      
                    finalm[i][j]=m[i][j];                       
                }
                if (i>=n) {                                     
                    finalm[i][j]=m[i+1][j];                     
                }
            }
        }

    return finalm;
}

public static void main(String[] args) {

    double [][] m = {{1,2,3},{1,9,2},{0,6,3}};
    double [][] result = removeRow(m,0);

    for (int i = 0; i<result.length; i++) {

        for (int j = 0; j<result[i].length; j++) {
            System.out.println(result[i][j]);
                }
            }
        }
}

1 个答案:

答案 0 :(得分:4)

图片Array

0, 0, 0, 0
1, 1, 1, 1
2, 2, 2, 2   <----- n
3, 3, 3, 3

n是2的地方。

该方法构造一个空Array并少一行:

0, 0, 0, 0
0, 0, 0, 0
0, 0, 0, 0

然后在每个循环中循环,如果索引小于n,则将其复制到第二个Array。因此,将复制第一行和第二行:

0, 0, 0, 0
1, 1, 1, 1
0, 0, 0, 0

然后,如果索引等于或大于n,它将把行从索引+ 1复制到第二个Array

//Skips the row 2, 2, 2, 2
0, 0, 0, 0
1, 1, 1, 1
3, 3, 3, 3

还要注意,由于我们要复制整个行,因此不需要内部循环。我们可以简单地做到:

public static double [][] removeRow(double [][] m , int n){ 
    double [][] finalm = new double [m.length-1][m[0].length];  

    for (int i = 0; i<finalm.length; i++) {                     
          if (i<n) {                                      
              finalm[i]=m[i];                       
          }
          if (i>=n) {                                     
              finalm[i]=m[i+1];                     
          }
    }
    return finalm;
}