4

私は現在テトリスAIに取り組んでおり、4x4の多次元配列を反転する方法を探しています。私は全体を見渡してみましたが、私が見つけたのは回転でしたが、私の場合は機能しませんでした。から

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
4

3 に答える 3

3

どの次元を反転する必要があるかわかりませんが、これはそのうちの1つです...このメソッドは元の配列を破棄することに注意してください。あなたは自分のニーズを明確にしませんでした。

  • どの次元を反転する必要があるかは言わなかった
  • インプレースにするか、新しいアレイを作成するかについては言いませんでした

そうは言っても、ここに1つの解決策があります

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,
于 2012-11-07T23:11:10.317 に答える
0

フリッピングの正確な意味はわかりませんが、あなたの例に基づいて、次のことを行うことで結果を得ることができます

temp = array[0];
array[0] = array[3];
array[3] = temp;
temp = array[1];
array[1] = array[2];
array[2] = temp;
于 2012-11-07T23:06:49.770 に答える
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;
}
于 2012-11-07T23:17:53.653 に答える