首页 > 解决方案 > 将多维数组顺时针旋转 90 度

问题描述

我已经能够解决大部分问题。但是我的输出不断抛出异常。我确定这是小事,但我似乎无法弄清楚如何使这项工作正常进行。我将异常、最初对我说的任务以及到目前为止的代码包括在内:

使用公式array[j][n - 1 - i]我得到以下异常:

线程“main”java.lang.ArrayIndexOutOfBoundsException 中的异常:com.company.Main.main(Main.java:20) 处长度为 4 的索引 -1 越界

如果我使用array[j][n - i]我没有例外,但这不是正确的输出顺序。

坚持了一周!

给定一个大小为矩形的数组n×m。通过将结果记录到大小为 m×n 的新数组中,将其顺时针旋转 90 度。

输入数据格式:

输入两个数字nm,不超过 100,然后输入一个数组n×m大小。

输出数据格式:

输出结果数组。在输出中用一个空格分隔数字。

样本输入 1:

3 4

11 12 13 14
21 22 23 24
31 32 33 34

样本输出 1:

31 21 11
32 22 12
33 23 13
34 24 14
class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] array = new int[n][m];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                array[i][j] = scanner.nextInt();
            }
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(array[j][n - 1 - i] + " ");
            }
            System.out.println("");
        }
    }
}

标签: javaarraysmultidimensional-arrayrotationtranspose

解决方案


如果您只是将其旋转 90 度,那么您只是从行尾开始到行首,同时左右移动列。所以你的代码应该是:

int n = 3;
int m = 4;

int[][] array = {
        {11, 12, 13, 14},
        {21, 22, 23, 24},
        {31, 32, 33, 34}};

for (int col = 0; col < m; col++) {
    for (int row = n - 1; row >= 0; row--) {
        System.out.print(array[row][col] + " ");
    }
    System.out.println("");
}

推荐阅读