2012-11-07 75 views
3

我目前正在研究一個俄羅斯方塊AI,而我正在尋找一種方法來翻轉一個4乘4的多維數組。我已經找遍了,最能找到的是旋轉的,這對我來說不起作用。 從翻轉一個多維數組java

o o o o 

o x x o 

o x o o 

o x o o 

o x o o 

o x o o 

o x x o 

o o o o 

回答

3

我不實現不知道你需要翻轉哪一個維度,但是這是其中之一......請注意,這種方法破壞了原始數組!你沒有明確你的需求。

  • 你沒有說需要哪些維度翻轉
  • 你沒有說是否應該就地或創建一個新的陣列

這就是說,這裏有一個解決方案

public static void main(String args[]) { 
    Integer[][] myArray = {{1, 3, 5, 7},{2,4,6,8},{10,20,30,40},{50,60,70,80}}; 

    // Before flipping 
    printArray(myArray); 
    System.out.println(); 

    // Flip 
    flipInPlace(myArray); 

    // After flipping 
    printArray(myArray); 
} 

public static void printArray(Object[][] theArray) { 
    for(int i = 0; i < theArray.length; i++) { 
     for(int j = 0; j < theArray[i].length; j++) { 
      System.out.print(theArray[i][j]); 
      System.out.print(","); 
     } 
     System.out.println(); 
    } 
} 

// *** THIS IS THE METHOD YOU CARE ABOUT *** 
public static void flipInPlace(Object[][] theArray) { 
    for(int i = 0; i < (theArray.length/2); i++) { 
     Object[] temp = theArray[i]; 
     theArray[i] = theArray[theArray.length - i - 1]; 
     theArray[theArray.length - i - 1] = temp; 
    } 
} 

產地:

1,3,5,7, 
2,4,6,8, 
10,20,30,40, 
50,60,70,80, 

50,60,70,80, 
10,20,30,40, 
2,4,6,8, 
1,3,5,7, 
+0

+1但是,如果你使用OpenGL,你可以通過180將其旋轉和鏡像它們它使用基元。 – Igor

+0

@Igor:沒有辦法知道他的問題最好的解決方案是什麼,因爲他沒有給我們足夠的關於他的要求的信息 – durron597

+0

我同意......我們不知道他在用什麼陣列爲 – Igor

0

我不知道是什麼意思翻轉究竟,但基於您的例子,其結果可能做

temp = array[0]; 
array[0] = array[3]; 
array[3] = temp; 
temp = array[1]; 
array[1] = array[2]; 
array[2] = temp; 
0

你可以編寫類似的信息(僞代碼,我沒有做過的Java的年齡,但你的想法)

function flipGridVertically(gridToFlip){ 

Array gridToReturn; 

//start from the bottom row (gridToFlip.size is the vertical size of the grid) 
//size is the horizontal size of the grid. 
for (counter=gridToFlip.size-1; counter>0; counter--) 
    //start the second loop from the top 
    for (counter2=0;counter2<gridToFlip.size;counter2++) 
    gridToReturn[counter2] = gridToFlip[counter]; 

return gridToReturn; 
}