как поменять местами симметричные элементы матрицы по правой диагонали

1

У меня есть код, который создает 2-мерный массив, и он работает так, как должен, но теперь я хочу, чтобы первая строка стала последней строкой в обратном порядке.

например, если у вас есть столбец

1
2
3
4

должен появиться в новом массиве следующим образом:

4 3 2 1

матрица, которая у меня есть, такова:

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

новая матрица должна быть такой:

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

Это мой код:

package test5;

public class test5 {

    public static void main(String[] args) {
        int[][] nums = new int[4][4];

        nums[0][0] = 1;
        nums[0][1] = 2;
        nums[0][2] = 3;
        nums[0][3] = 4;

        nums[1][0] = 5;
        nums[1][1] = 6;
        nums[1][2] = 7;
        nums[1][3] = 8;

        nums[2][0] = 9;
        nums[2][1] = 10;
        nums[2][2] = 11;
        nums[2][3] = 12;

        nums[3][0] = 13;
        nums[3][1] = 14;
        nums[3][2] = 15;
        nums[3][3] = 16;

        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums.length; j++) {

                System.out.print(nums[i][j] + " ");
            }
            System.out.println();
        }
    }
}

так кто-нибудь может мне помочь???

Теги:
multidimensional-array
for-loop
swap

1 ответ

0
Лучший ответ

Если вам нужно сделать это самостоятельно, попробуйте что-то вроде этого:

    public class MatrixTranspose {
        static int m1[][] = new int[][]{{1, 2, 3, 4, 5}, {5, 6, 7, 8, 9}, {9, 10, 11, 12, 13}, {13, 14, 15, 16, 17}};
        public static String toString(int[][] m) {
            StringBuilder text = new StringBuilder();
            for (int row = 0; row < m.length; row++) {
                int r[] = m[row];
                for (int col = 0; col < r.length; col++) {
                    if (col > 0) text.append(", ");
                    text.append(r[col]);
                }
                text.append("\n");
            }
            return text.toString();
        }

        public static int[][] transpose(int[][] m) {
            int rows = m.length;
            int cols = m[0].length;

            int t[][] = new int[cols][]; // first create the empty transpose matrix
            for (int trow = 0; trow < cols; trow++) {
                t[trow] = new int[rows];
            }

            for (int row = 0; row < rows; row++) {
                for (int col = 0; col < cols; col++) {
                    int tcol = rows-row-1; // transposed tcol is inverted row
                    int trow = cols-col-1; // transposed trow is inverted col
                    t[trow][tcol] = m[row][col];
                }
            }
            return t;
        }

        public static void main(String...params) {
            System.out.println(toString(m1));
            System.out.println("--");
            System.out.println(toString(transpose(m1)));
        }
    }
  • 0
    спасибо за вашу помощь, вы можете объяснить функцию транспонирования более подробно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню