Cách tìm ma trận chuyển vị trong Java
Trong bài viết này chúng ta làm bài tập tìm ma trận chuyển vị trong Java. Đây là một bài toán liên quan đến mảng hai chiều, vì vậy các bạn hãy tìm hiểu về nó trước khi đi vào bài này nhé.
Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma trận.
Ví dụ: ta có ma trận A = [2x3], tức là 2 hàng và 3 cột. Như vậy chuyển vị của nó sẽ là A = [3x2], tức là 3 hàng và 2 cột.
1. Tìm ma trận chuyển vị trong Java có sẵn
Để tìm chuyển vị của một ma trân, trước tiên ta cần khai báo và khởi tạo các giá trị cho phần tử của ma trận. Ma trận matrix có row = 2 (hai hàng), column = 3 (ba cột).
Bài viết này được đăng tại [free tuts .net]
int row = 2, column = 3; int[][] matrix = { {2, 3, 4}, {5, 6, 4} };
Ta cần thêm một ma trận transpose là ma trận chuyển vị của matrix. Với số hàng bằng số cột của matrix và số cột bằng số hàng của matrix.
int[][] transpose = new int[column][row];
Bây giờ sử dụng vòng lặp for để gán các phần tử trong matrix sang cho các phần tử tương ứng trong transpose.
for(int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { transpose[j][i] = matrix[i][j]; } }
Cuối cùng sẽ là một hàm print() để in các phần tử trong ma trận, hàm nhận vào một mảng đa chiều làm tham số.
public static void print(int[][] matrix) { for(int[] row : matrix) { for (int column : row) { System.out.print(column + " "); } System.out.println(); } }
Full code:
class Main { public static void main(String[] args) { //khai báo hai biến row và column là hàng, cột của ma trận int row = 2, column = 3; //khai báo một mảng hai chiều matrix và gán phần tử cho nó int[][] matrix = { {2, 3, 4}, {5, 6, 4} }; //gọi hàm print để in các phần tử trong mảng hai chiều ra màn hình System.out.printf("\nCác phần tử trong ma trận %dx%d:\n", row, column); print(matrix); // tạo một mảng hai chiều transpose với: // số hàng = số cột của mảng matrix // số cột bằng số hàng của mảng matrix int[][] transpose = new int[column][row]; //sử dụng vòng lặp for để gán các phần tử trong mảng matrix cho mảng transpose for(int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { transpose[j][i] = matrix[i][j]; } } //gọi hàm print để in mảng transpose ra màn hình System.out.printf("\nCác phần tử trong ma trận chuyển vị:\n", row, column); print(transpose); System.out.println("\n---------------------------------------"); System.out.println("Chương trình này được đăng tại Freetuts.net"); } //hàm in các phần tử trong mảng hai chiều public static void print(int[][] matrix) { for(int[] row : matrix) { for (int column : row) { System.out.print(column + " "); } System.out.println(); } } }
Kết quả:
2. Tìm ma trận chuyển vị trong Java được nhập từ bàn phím
Để nhận dữ liệu từ bàn phím chúng ta cần khai báo thư viện Scanner: import java.util.Scanner;
.
Bây giờ sử dụng đối tượng thuộc class Scanner để yêu cầu người dùng nhập vào số dòng và số cột cho ma trận.
int row, column; Scanner scanner = new Scanner(System.in); System.out.println("\nNhập vào số dòng của ma trận: "); row = scanner.nextInt(); System.out.println("Nhập vào số cột của ma trận: "); column = scanner.nextInt();
Sau khi đã có số dòng và số cột, ta khai báo mảng đa chiều matrix và cấp phát bộ nhớ cho nó.
int[][] matrix = new int[row][column];
Sử dụng vòng lặp for để nhập giá trị cho các phần tử của ma trận matrix.
for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { System.out.print("Nhập phần tử thứ [" + i + ", " + j + "]: "); matrix[i][j] = scanner.nextInt(); } }
Như vậy là chúng ta đã có dữ liệu cho ma trận matrix. Tương tự như phần 1, ta chỉ cần gán giá trị của phần tử matrix cho phần tử tương ứng trong transpose.
Full code:
import java.util.Scanner; class Main { public static void main(String[] args) { int row, column; Scanner scanner = new Scanner(System.in); System.out.println("\nNhập vào số dòng của ma trận: "); row = scanner.nextInt(); System.out.println("Nhập vào số cột của ma trận: "); column = scanner.nextInt(); // khai báo và cấp phát bộ nhớ cho mảng int[][] matrix = new int[row][column]; // Để nhập giá trị các phần tử cho mảng // chúng ta sẽ sử dụng 2 vòng lặp for // vòng lặp for bên ngoài sẽ duyệt i từ 0 đến row - 1 // và vòng lặp for bên trong sẽ duyệt j từ 0 đến column - 1 // mỗi lần như vậy thì sẽ nhập vào phần tử tại vị trí i, j for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { System.out.print("Nhập phần tử thứ [" + i + ", " + j + "]: "); matrix[i][j] = scanner.nextInt(); } } // gọi hàm print để hiển thị ma trận System.out.println("Ma trận vừa nhập: "); print(matrix); // tạo một mảng hai chiều transpose với: // số hàng = số cột của mảng matrix // số cột bằng số hàng của mảng matrix int[][] transpose = new int[column][row]; //sử dụng vòng lặp for để gán các phần tử trong mảng matrix cho mảng transpose for(int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { transpose[j][i] = matrix[i][j]; } } //gọi hàm print để in mảng transpose ra màn hình System.out.printf("\nCác phần tử trong ma trận chuyển vị:\n", row, column); print(transpose); System.out.println("\n---------------------------------------"); System.out.println("Chương trình này được đăng tại Freetuts.net"); } //hàm in các phần tử trong mảng hai chiều public static void print(int[][] matrix) { for(int[] row : matrix) { for (int column : row) { System.out.print(column + " "); } System.out.println(); } } }
Kết quả:
Như vậy là chúng ta đã tìm hiểu xong hai chương trình tìm ma trận chuyển vị trong Java. Các bạn có thể tìm hiểu về các bài tập Java khác tại đây, chúc các bạn thành công !!!