【问题标题】:Shift multidimensional array left多维数组左移
【发布时间】:2013-02-23 16:15:36
【问题描述】:

我有一个多维数组:

int[][] arrMulti = new int [3][3];

我写了一个简单的循环来将里面的数据显示为一个网格:

123
456
789

我现在需要做的是将所有内容左移一,并将网格右侧的空白间隙替换为零,如下所示:

230
560
890

理想情况下,我希望该方法能够移动任意大小的多维数组,例如

int[][] arrM = new int [28][28] or [98][98]

有人可以帮我解决这个问题吗?

谢谢!

这是我目前的代码:

package testingarrymove;


public class TestingArryMove {

//Start of shift array method
public static int[][] shiftArray (int arrShiftLeft[][] ) {

int from = 1;
int   to = 0;

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


    // move 1 to 0, 2 to 1, 3 to 2, 4 to 3, 5 to 4 ............
    System.arraycopy(arrShiftLeft, 1, arrShiftLeft, 0, arrShiftLeft.length - 1);

    from++;
    to++;

        return arrShiftLeft;
    }
}
    return null;   
} // end shiftArray

public static void main(String[] args) {

int [][] arrMultiDim = new int [3][3];

arrMultiDim [0][0] = 1;
arrMultiDim [0][1] = 2;
arrMultiDim [0][2] = 3;
arrMultiDim [1][0] = 4;
arrMultiDim [1][1] = 5;
arrMultiDim [1][2] = 6;
arrMultiDim [2][0] = 7;
arrMultiDim [2][1] = 8;
arrMultiDim [2][2] = 9;

// outputs original array
System.out.print("Original Array: ");
    //loops thought the rows of the array
    for (int i = 0; i < arrMultiDim.length; i++) {

       System.out.println();
        //loops thought the columns of the array
        for (int j = 0; j < arrMultiDim[0].length; j++) {    
            System.out.print(" "+arrMultiDim[i][j]);

        }

    }
    System.out.println();

    System.out.println("Shifted Array: "); 
    //this should copy just the row to another array by calling the shiftedArray
    shiftArray(arrMultiDim);
    //outputs the shifted array
    System.out.println(arrMultiDim);
}

} // end class

我已经尝试过 system.arraycopy。上面的代码输出如下:

Original Array: 
1 2 3
4 5 6
7 8 9
Shifted Array: 
[[I@ece88d2

【问题讨论】:

    标签: java multidimensional-array


    【解决方案1】:

    乍一看,我认为双端队列数据结构在这种情况下非常方便。您可以声明一个包含 3 行的队列数组,并使用队列函数进行左右移动。例如,您可以将一个项目出队并入队以进行右移,并从另一端出队并入队 0 以进行左移。您可能首先要查找the queue data structure,然后查找the double eneded queue data structure,最后实现功能,甚至使用现有库来使用dequeue(代表[d]ouble [ e]nded queue) 数据结构。通过这种方式,数组的大小对于执行您想要的操作并不重要,但是您必须稍微更改您提到的数据类型(3x3数组)。

    【讨论】:

      【解决方案2】:
      public static void shift(int[][] arr, int offs) {
          if (offs <= 0)
              return;
      
          offs = offs > arr[0].length ? arr[0].length : offs;
      
          for (int[] row : arr) {
              if (offs < arr.length)
                  System.arraycopy(row, offs, row, 0, row.length - offs);
              Arrays.fill(row, row.length - offs, arr.length, 0);
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2013-09-21
        • 2014-05-06
        • 2015-01-16
        • 1970-01-01
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 2018-10-07
        相关资源
        最近更新 更多