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

时间:2015-08-07 16:31:12

标签: java multidimensional-array invert

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

3 个答案:

答案 0 :(得分:0)

在你颠倒了一半之后,你在前半部分丢失了原始值,然后循环的其余部分只是将那些被替换的值复制回自身。

答案 1 :(得分:0)

制作方法:

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

答案 2 :(得分:0)

问题是因为你正在操纵同一个数组。

记住java arrays是引用类型。因此,tempArraysomeArray指的是同一个数组。

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

但由于它是相同的数组,因此在第一次迭代期间,数组将变为{3,2,3}。在第三次迭代中,您正在阅读相同的数组并尝试将3中的col=2替换为3中的col=0。所以你的结果是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.