我有一个像这样的二维数组:

2 0 0 2 0 4
2 0 0 2 0 4
2 0 0 2 0 4

我想将所有零向左移动,因此我做了以下方法:
public static void shiftLeft(int [][] array){

    for (int j = 0; j < array.length; j++) {

        for (int i = 0; i < array.length - 1; i++) {

            if ((array[j][i] != 0) && (array[j][i + 1] == 0)) {
                array[j][i + 1] = array[j][i];
                array[j][i] = 0;
            }
        }
    }
}

但是我得到的输出是这样的:
0 0 2 0 2 4
0 0 2 0 2 4
0 0 2 0 2 4

我怎样才能使所有零都向左移动?

最佳答案

在我看来,最简单的方法是使用3个嵌套循环。

变量遍历行。

变量 j1 查找从每行左侧开始的第一个非零元素。

变量 j2 查找 j1 之后的第一个零元素,并交换它们。
以下代码假定将二维矩阵A声明为 A [N] [M] ,其中N和M分别是行数和列数。

for(int i =0;i<N;i++){
  for(int j1=0;j1<M;j1++){
    if (A[i][j1]==0)
      continue;
    for(int j2=j1;j2<M;j2++){
      if( A[i][j2]==0){
         //swap
         int tmp=A[i][j1];
         A[i][j1]=A[i][j2];
         A[i][j2]=tmp;
       }
     }
  }
}

10-04 20:50