移动二维数组元素java

时间:2017-10-13 02:33:38

标签: java arrays loops

    public static int[][] shift(final int[][] original, final int amount) {

    int[][] shifted = new int[original.length][original[0].length];


    for (int col = 0; col < original.length; col++) {
        for (int row = 0; row < original[col].length; row++) {
            shifted[col][row] = FILL_VALUE;
        }

    for (int cols = 0; cols < original.length + amount; cols++) {
        for (int rows = 0; rows < original[cols].length; rows++) {
            if (cols - amount < original.length) {
                shifted[cols][rows] = original[cols - amount][rows];
            }
        }
   }
   }
    return shifted;
}

您好, 我正在尝试编写一个方法,将我的2-D数组中的元素向左移动一些任意数量。我不想将值循环回来,而是用一些已经预定义的fill_value填充空数组。如果移位量大于原始长度,我只返回一个只有fill_value的图像。但是,此函数抛出arrayindexoutofbound错误。但我想不出我应该如何改变我的for循环来修复错误。任何帮助表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:1)

我相信它是因为在你的第二个外部for循环中,条件是cols&lt;长度+金额,如果金额> 1,它将继续超过数组的边缘。你可以使用调试器逐步调试你的代码,看看它的确切位置。

答案 1 :(得分:0)

由于以下行发生错误:

shift [cols] [rows] = original [cols - amount] [rows];

当cols = 0,rows = 0,amount = 2(比如说)时,它试图访问不存在的原始[-2] [0]。

相反,您可以使用以下内容:

public class overflow1 {

    static int a[][] = {{1,2,3,4,5,6},{2,3,4,5,6,7},{3,4,5,6,7,8}, {4,5,6,7,8,9}, {5,6,7,8,9,10}, {6,7,8,9,10,11}};
    static int b[][] ;

    static int FILL_VALUE =0;

    public static int[][] shift(final int[][] original, final int amount) {

    int[][] shifted = new int[original.length][original[0].length];


    for (int col = 0; col < original.length; col++) {
        for (int row = 0; row < original[col].length; row++) {
            shifted[col][row] = FILL_VALUE;
        }

     for (int cols = 0; cols < original.length ; cols++) {
        for (int rows = 0; rows < original[cols].length; rows++) {
            if (cols - amount >=0) {
                shifted[cols][rows] = original[cols - amount][rows];
            }
        }
   }
   }
    return shifted;
  }

  public static void main(String[] arggs) {

    b=shift(a,2);

      System.out.println("Original array:");
      for(int i=0; i<a.length; i++){
          for (int j=0; j<a[i].length; j++){
              System.out.print(a[i][j]+ ":");
          }
          System.out.println();
      }

    System.out.println("After shift by 2 array:");
    for(int i=0; i<b.length; i++){
        for (int j=0; j<b[i].length; j++){
            System.out.print(b[i][j]+ ":");
        }
        System.out.println();
    }
  }
}

以下是样本的输出:

原始阵列:

1:2:3:4:5:6:

2:3:4:5:6:7:

3:4:5:6:7:8:

4:5:6:7:8:9:

5:6:7:8:9:10:

6:7:8:9:10:11:

换班后2,数组:

0:0:0:0:0:0:

0:0:0:0:0:0:

1:2:3:4:5:6:

2:3:4:5:6:7:

3:4:5:6:7:8:

4:5:6:7:8:9: