Java - как повернуть квадратный массив (двумерный) на 90 градусов вправо? - PullRequest
0 голосов
/ 01 октября 2018

Итак, как это должно работать.Я ввожу «n» и «m», чтобы создать двумерную матрицу с разрешением n * m.Мне нужно повернуть его на 90 градусов вправо, чтобы сделать его похожим на изображение, нарисованное краской:

enter image description here

Я написал код, но не могудействительно заставить это работать - похоже, это легко, но каждый раз, когда я пытаюсь заставить это работать, я получаю "исключение вне".Вот оно:

 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s1 = new Scanner(System.in);
        int n = s1.nextInt();
        int m = s1.nextInt();
        System.out.println();
        int[][] array = new int[n][m];
        int[][] ar = new int[n][m];
        for(int i = 0; i < array.length; i++) {
            for(int j = 0; j < array[n - 1].length; j++) {
                array[i][j] = s1.nextInt();
            }
        }
        System.out.println("INPUT ARRAY :");
        System.out.println();
        for(int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[n - 1].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
        /* here is the main actions with the array begin*/
        for(int i = 0; i < array.length; i++) {
            for(int j = 0; j < array[n - 1].length; j++) {
                ar[i][j]=array[n - j - 1][i];
            }
        }
        /*the end of actions with the array*/
        System.out.println("TASK ARRAY :");
        System.out.println();
        for(int i = 0; i < ar.length; i++) {
            for (int j = 0; j < rr[n - 1].length; j++) {
                System.out.print(ar[i][j] + " ");
            }
            System.out.println();
        }
    }


}

Что именно я делаю не так?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вот правильная версия вашей программы со всеми фиксированными индексами цикла for, и печать перенесена в отдельный метод.

public class Main {
    static void print(String title, int[][] array) {
        System.out.println(title);
        System.out.println();
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Scanner s1 = new Scanner(System.in);
        int m = s1.nextInt();
        int n = s1.nextInt();
        System.out.println();
        int[][] array = new int[m][n];
        int[][] ar = new int[n][m];
        for(int i = 0; i < array.length; i++) {
            for(int j = 0; j < array[i].length; j++) {
                array[i][j] = s1.nextInt();
            }
        }

        print("INPUT ARRAY :", array);

        /* here is the main actions with the array begin*/
        for(int i = 0; i < array.length; i++) {
            for(int j = 0; j < array[i].length; j++) {
                ar[j][m - i - 1] = array[i][j];
            }
        }

        /*the end of actions with the array*/
        print("TASK ARRAY :", ar);
    }
}
0 голосов
/ 01 октября 2018

`double x1 = point.x - center.x;double y1 = point.y - center.y;

double x2 = x1 * Math.cos (угол) - y1 * Math.sin (угол));double y2 = x1 * Math.sin (угол) + y1 * Math.cos (угол));

point.x = x2 + center.x;point.y = y2 + center.y; `

Это должно преобразовать каждую точку, оттуда она должна быть достаточно простой.Центр длины / 2

...