Поверните 2d матрицу вправо - PullRequest
4 голосов
/ 25 апреля 2010

Я хочу, чтобы двумерная матрица вращалась вправо, она прекрасно компилируется, но когда я пытаюсь запустить ее, она говорит, что индекс массива выходит за пределы исключения. Например, я хочу, чтобы {{10,20,30}, {40,50,60}} вращались в {{40,10}, {50,20}, {60,30}}

import java.util.*;
public class Rotate{
   public static int[][] rotate(int[][] m) {
     int [][] rotateM = new int[m[0].length][m.length];
     for (int i= 0; i< m.length; i++){
        for (int j= 0; j< m[0].length; j++){
           rotateM[i][j] = m[j][m.length-i-1];
        }
     }


     return rotateM;
  }
   public static void main(String[]args){
     int[][]m = {{10,20,30},
           {40,50,60}};
     System.out.println(Arrays.toString(rotate(m)));                  

  }

}

Ответы [ 4 ]

2 голосов
/ 25 апреля 2010

Вот рабочий пример:

private int[][] rotateMatrix(int[][] matrix)
{
    int backupH = h;
    int backupW = w;
    w = backupH;
    h = backupW;
    int[][] ret = new int[h][w];
    for (int i = 0; i < h; ++i) {
        for (int j = 0; j < w; ++j) {
            ret[i][j] = matrix[w - j - 1][i];
        }
    }

    return ret;
}

Я использовал этот код, чтобы вращать свои кирпичи в тетрисе. Этот код вращает матрицу по часовой стрелке.

1 голос
/ 25 апреля 2010

Похоже, вы только что перевернули свои индексы.

Вместо:

rotateM[i][j] = m[j][m.length-i-1];

Вы должны были написать:

rotateM[j][i] = m[m.length-i-1][j];
0 голосов
/ 25 апреля 2010

Прежде всего удалите это i = i ++.

i ++ и j ++ будет достаточно, инициализируйте ваши массивы и у вас неправильная логика,

for (int j = 0; j < m[0].Length; j++)
    for (int i = 0; i < m.Length; i++)
         rotateM[j][i] = m[m.Length - i - 1][j];

Это то, что вам нужно.

0 голосов
/ 25 апреля 2010

Не увеличивать, используя i = i++. Просто напишите i++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...