Java数组操作,反转int[][]数组



我试图翻转这个数组中的每个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是一个计数器变量,通过列向后递减

问题在于你操作的是同一个数组。

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

现在,假设数组的第一行是{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.

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

创建一个方法:

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);

相关内容

  • 没有找到相关文章

最新更新