2013-02-21 88 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