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; } }
Advertisement
Answer
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; }