我试图翻转这个数组中的每个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
是引用类型。所以你的tempArray
和someArray
指向同一个数组。
现在,假设数组的第一行是{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);