0

我真的不知道该怎么称呼这个问题,所以请随意编辑它...

基本上我有一个 char[][] 类变量“canvasArray[][]”

它以不同的方法填充了代表画布上字母的字符(类似于 ASCII 艺术)

我有一个方法可以水平翻转这个图像

void mirrorHorizontally()
{
    char[][]horizontalImage = canvasArray;


    for (int i = 0; i < height /2; i++)
    { 
       for(int j = 0; j < width; j++)
       {            
           horizontalImage[height - (i+1)][j] = horizontalImage[i][j];           
           horizontalImage[i][j] = horizontalImage[height - (i+1)][j];
       }
    }

    printPicture(horizontalImage);
}

从我所看到的,我只是将 char[][] 水平图像设置为 canvasArray 的值,但似乎不是因为如果我打印 canvasArray 而不是它向我显示相同的值。

我需要画布数组保持不变,因为我还有其他方法也需要使用它

有任何想法吗??

提前致谢

编辑:感谢所有回答的人,恐怕答案是你们所说的一切的结合,所以我不知道该接受谁?

4

3 回答 3

3

我会选择类似的东西:

void mirrorHorizontally()
{
    char[][]horizontalImage = new char[horizontalImage.length][horizontalImage[0].length]; // assumes all lines have same length


    for (int i = 0; i < height /2; i++)
    { 
       for(int j = 0; j < width; j++)
       {            
           horizontalImage[height - (i+1)][j] = canvasArray[i][j];           
           horizontalImage[i][j] = canvasArray[height - (i+1)][j];
       }
    }

    printPicture(horizontalImage);
}

这样我正在创建一个新缓冲区(不引用和修改旧缓冲区)并直接使用它来填充新缓冲区

于 2013-02-21T14:39:36.400 回答
1

您的第一次调用会抹去 处的旧值[height - (i+1)][j]。相反,存储旧值,以便您可以在下面使用它:

char temp = horizontalImage[height - (i+1)][j];
horizontalImage[height - (i+1)][j] = horizontalImage[i][j];
horizontalImage[i][j] = temp;
于 2013-02-21T14:32:50.337 回答
1

在 Java 中,数组是对象。因此,当您同时分配char[][]horizontalImage = canvasArray;两者horizontalImagecanvasArray指向同一个数组对象时。这意味着当您修改时,horizontalImage您也会修改canvasArray. 您需要将值从复制canvasArray到新的horizontalImage.

编辑:试试这个:

for (int i = 0; i < height /2; i++)
   { 
   for(int j = 0; j < width; j++)
   {            
       horizontalImage[height - (i+1)][j] = canvasImage[i][j];           
       horizontalImage[i][j] = canvasImage[height - (i+1)][j];
   }
}

并省略循环前的赋值。

于 2013-02-21T14:35:58.727 回答