我试图翻转此数组中的每个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是一个计数器变量,用于向后递减列
答案 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
是引用类型。因此,tempArray
和someArray
指的是同一个数组。
现在,假设数组的第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.