2016-10-11 3 views
-3

Ich habe Matrix und möchte es gegen den Uhrzeigersinn drehen. zum Beispiel:Java - wie man Matrix um weniger als 90 Grad dreht

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

become: 
2 3 4 8 
1 7 11 12 
5 6 10 16 
9 13 14 15 

hier ist die Methode zu drehen, was ich bisher gemacht habe. Das Ergebnis (siehe unten) ist, dass die Matrix um 90 Grad gedreht ist; Ich möchte mich so drehen können, dass Gegenstände auf dem äußeren Ring nur um einen Ort bewegt werden.

int[][] rotateArray(int[][] m) { 
     int e = m.length - 1; 
     int c = e/2; 
     int b = e % 2; 
     for (int r = c; r >= 0; r--) { 
      for (int d = c - r; d < c + r + b; d++) { 
       int t = m[c - r][d]; 
       m[c - r][d] = m[d][e - c + r]; 
       m[d][e - c + r] = m[e - c + r][e - d]; 
       m[e - c + r][e - d] = m[e - d][c - r]; 
       m[e - d][c - r] = t; 
      } 
     } 

     return m; 
    } 

Stromausgang

4 8 12 16 
3 7 11 15 
2 6 10 14 
1 5 9 13 

Bitte helfen, danke :)

+0

Mögliche Duplikat [Drehen im Uhrzeigersinn Array] (http://stackoverflow.com/questions/2799755/rotate-array-clockwise) – DimaSan

+0

Ihre Matrix ist nicht 2x2, und ich kann nicht sehen, was offensichtlich mit der Ausgabe falsch ist. Was ist das eigentliche Problem? –

+0

Es tut mir leid, ich denke, dass es anders ist, dass Sie um 90 Grad drehen möchten, aber ich möchte eher nach links verschieben um 1 – sptra

Antwort

0

Versuchen Sie dies.

static final int[][][] ROT = { 
    {{1, 0}, {0, 0}, {0, 1}, {0, 2}}, 
    {{2, 0}, {2, 1}, {1, 1}, {0, 3}}, 
    {{3, 0}, {2, 2}, {1, 2}, {1, 3}}, 
    {{3, 1}, {3, 2}, {3, 3}, {2, 3}}, 
}; 

int[][] rotateArray(int[][] m) { 
    int[][] result = new int[m.length][m[0].length]; 
    for (int row = 0; row < m.length; ++row) 
     for (int col = 0; col < m[0].length; ++col) 
      result[ROT[row][col][0]][ROT[row][col][1]] = m[row][col]; 
    return result; 
} 

Und

int[][] m = { 
     { 1, 2, 3, 4}, 
     { 5, 6, 7, 8}, 
     { 9, 10, 11, 12}, 
     {13, 14, 15, 16}, 
    }; 
    int[][] rotated = rotateArray(m); 
    for (int[] row : rotated) 
     System.out.println(Arrays.toString(row)); 

Ergebnis:

[2, 3, 4, 8] 
[1, 7, 11, 12] 
[5, 6, 10, 16] 
[9, 13, 14, 15] 
+0

wow danke, aber kannst du erklären warum du die statische Variable "ROT" dort anlegst? und warum ist der Wert von ROT so? Vielen Dank – sptra

+0

'ROT' zeigt das Ziel jedes Elements. Zum Beispiel muss 'm [0] [0]' zu 'result [1] [0]' gehen, 'm [0] [1]' muss zu 'result [0] [0]' gehen und so weiter. – saka1029

Verwandte Themen