2013-02-21 77 views
2

我有一个类,它创建一个具有所需宽度和高度的字符画布。翻转多维数组java

内此我有一个方法drawLetter()(它基本上改变了字符,以便字母时显示在画布上(如非常简单的ASCII技术)

我有其他3种方法rotateClockwise,flipHorizo​​ntal和flipVertical

旋转和flipHorizo​​ntal我做得很好,他们的工作,但我似乎无法工作出我垂直错过垂直翻转数组(出于兴趣,我认为我有水平和垂直错误的方式,但病倒了一个样本什么即时尝试完成以下)

这是什么我不能工作了:

这样的:

# # # ~ 
~ # ~ ~ 
~ # ~ ~ 
~ ~ ~ ~ 

这样:

~ # # # 
~ ~ # ~ 
~ ~ # ~ 
~ ~ ~ ~ 

显然这将在完成for循环像我其他的方法,下面我会后我有方法做已经为水平和顺时针旋转,以证明其不做作业,我不能做

void mirrorHorizontally() 
{ 
    char[][]horizontalImage = new char[height][width]; 

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


void rotateClockwise() 
{ 
    char[][] rotatedImage = new char[height][width]; 

    for(int i=0; i< canvasArray.length; i++) 
    { 
     for(int j= canvasArray.length-1; j >= 0; j--) 
     { 
      rotatedImage[i][rotatedImage.length-1-j] = canvasArray[j][i]; 
     } 
    } 

    printPicture(rotatedImage); 
} 

canvasArray是在一个char [] []类变量原始图像出于兴趣

+0

什么你的问题是?交换不能正常工作? – 2013-02-21 16:26:05

+0

老实说,我只是不能解决如何构建for循环的值交换 – AngryDuck 2013-02-21 16:27:31

+0

iv使用二维字符[]使用字符串数组等,使其工作,但即时通讯尝试使这个简单的应用程序更好通过使用一个多维数组而不是 – AngryDuck 2013-02-21 16:28:33

回答

3

这应该满足您的需求:

public static char[][] mirror(int width, int height, char[][] in) { 
    char[][] out = new char[height][width]; 
    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      out[i][width - j - 1] = in[i][j]; 
     } 
    } 
    return out; 
} 

例如:

char[][] in = new char[][] { 
    new char[] { '#', '#', '#', '~' }, 
    new char[] { '~', '#', '~', '~' }, 
    new char[] { '~', '#', '~', '~' }, 
    new char[] { '~', '~', '~', '~' }, 
    new char[] { '~', '~', '~', '~' } 
}; 

for (char[] line : mirror(4, 5, in)) { 
    for (char row : line) { 
     System.out.print(row); 
    } 
    System.out.println(); 
} 

打印:

~### 
~~#~ 
~~#~ 
~~~~ 
~~~~ 
+1

+1,在阅读本文后不会发布我复杂的方法;) – jlordo 2013-02-21 16:39:37

+0

谢谢你非常那正是我正在寻找的。与以前的方法完全一样的风格,这只是其中一个时候,当它看着它太长,没有看到明显的,再次感谢 – AngryDuck 2013-02-21 16:42:44