【问题标题】:Java array manipulation, invert an int[][] arrayJava 数组操作,反转 int[][] 数组
【发布时间】:2015-08-07 16:31:11
【问题描述】:

我正在尝试翻转此数组中的每个 col 以反转图像。然而,当我运行我的代码时,我得到了图像后半部分的镜像,出于某种荒谬的原因,我无法弄清楚。有人可以告诉我为什么这只能半途而废吗?

public void invert() { 
    int[][] tempArray= someArray;

    for(int row = 0; row < someArray.length; ++row)
    {
        int x = someArray[row].length - 1;
        for(int col = 0; col < someArray[i].length; ++col, --x)
        {
            tempArray[row][col] = someArray[row][x];
        }
    }
    someArray = tempArray;
} 

someArray 是一个 int[][] 数组,在我的班级的其他地方定义,大小为 328x500 int x 是一个计数器变量,通过列向后递减

【问题讨论】:

  • 你能解释一下变量x的作用吗?你能解释一下你所说的填充是什么意思吗?请
  • 您正在覆盖旧值。您必须交换值。请记住,数组是引用,因此您正在处理原始数据。
  • 您是要反转图像的颜色还是要旋转/镜像它?

标签: java multidimensional-array


【解决方案1】:

问题是因为你操作的是同一个数组。

记住 java arrays 是引用类型。所以你的tempArraysomeArray 指的是同一个数组。

现在,假设您的数组的第 1 行是 {1,2,3},您的输出应该是 {3,2,1}

但是由于是同一个数组,所以在第一次迭代中,数组会变成{3,2,3}。在第三次迭代中,您正在读取相同的数组并尝试用col=0 中的3 替换col=2 中的3。所以你的结果是3,2,3

您应该改为创建一个新数组。

替换:

    int[][] tempArray= someArray;

    int[][] tempArray = new int[someArray.length][someArray[0].length];
    // If you have variable length column, you may want to intialize it inside the loop.

【讨论】:

    【解决方案2】:

    在你反转了一半之后,你失去了前半部分的原始值,然后循环的其余部分只是将那些被替换的值复制回它们自己。

    【讨论】:

      【解决方案3】:

      制作方法:

      public static int[] reversArray(int[] array){
          for(int i = 0; i < Math.ceil(array.length/2); i++){
              int temp = array[i];
              array[i] = array[array.length - (i+1)];
              array[array.length - (i+1)] = temp;
          }
          return array;
      }
      

      然后:

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

      【讨论】:

        猜你喜欢
        • 2021-12-11
        • 1970-01-01
        • 2017-11-20
        • 2015-10-30
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多