Search code examples
javaarraysmatrixmultidimensional-arraytranspose

How to swap rows and columns of a 2d array?


I'm trying to write a method for 'transpose' a two-dimensional array of integers, in which the rows and columns of the original matrix are exchanged.

However, I have no idea how I can realize this. How do I write out this method?

public class Matrix {
    private int[][] numbers;

    public Matrix(int rows, int colums) {
        if (rows < 1)
            rows = 1;
        else
            rows = rows;
        if (colums < 1)
            colums = 1;
        else
            colums = colums;
        numbers = new int[rows][colums];
    }

    public final void setNumbers(int[][] numbers) {
        this.numbers = numbers;
    }

    public int[][] getNumbers() {
        return numbers;
    }

    public int[][] transpose() {
        int[][] transpose = getNumbers();
        return numbers;
    }
}

Solution

  • You could iterate over the rows and columns and assign each element [i,j] to the transposed [j,i]:

    /**
     * Transposses a matrix.
     * Assumption: mat is a non-empty matrix. i.e.:
     * 1. mat != null
     * 2. mat.length > 0
     * 3. For every i, mat[i].length are equal and mat[i].length > 0
     */
    public static int[][] transpose(int[][] mat) {
        int[][] result = new int[mat[0].length][mat.length];
        for (int i = 0; i < mat.length; ++i) {
            for (int j = 0; j < mat[0].length; ++j) {
                result[j][i] = mat[i][j];
            }
        }
        return result;
    }