Chuyển tới nội dung

Nhập xuất mảng hai chiều trong Java

mang hai chieu trong java

Bài viết chia sẻ khai báo, nhập xuất mảng hai chiều trong java, thao tác với ma trận số nguyên. Sắp xếp ma trận số nguyên theo cột và một số dạng bài tập ứng dụng khác liên quan.

1. Mảng hai chiều trong Java

Mảng hai chiều trong java là một dạng cấu trúc dữ liệu quan trọng. Cấu trúc này thường sử dụng thao tác với các bài toán liên quan đến ma trận và nó sẽ được ứng dụng rất nhiều trong lập trình thực tế.

Giống với cấu trúc mảng hai chiều của các ngôn ngữ khác, mảng hai chiều java là một mảng trong đó mỗi ô nhớ sẽ có hai chỉ số hàng và cột. Thường một mảng sẽ có dạng kiểu m x n tức là mảng sẽ có m hàng và n cột.

Bạn hình dung cấu trúc mảng sẽ có dạng tương tự như hình vẽ bên dưới. Đây là mô tả cấu trúc của ma trận 3×3

khai bao mang hai chieu java

Thao tác với mảng hai chiều cũng rất quan trọng, cùng mình tìm hiểu ở phần dưới nhé!

2. Cú pháp khai báo mảng hai chiều

Cú pháp khai báo có lẽ là phần được quan tâm nhất nếu như bạn đã nắm được cấu trúc mảng ở các ngôn ngữ khác.
Java có một điểm mạnh đó là mảng hai chiều có thể lưu trữ nhiều loại kiểu dữ liệu khác nhau. Có thể dùng kiểu int, double, string hay một kiểu tự định nghĩa nào đó.

Có hai cú pháp thường dùng: Cách đầu tiên là khai báo và cấp bộ nhớ trực tiếp. Cách thứ hai là khai báo sau đó mới cấp bộ nhớ.

Cách 1: <Kiểu biến> + <kiểu dữ liệu> + < tên mảng>[][];
Sau đó mới cấp bộ nhớ: <tên biến> = new <tên kiểu dữ liệu> [số hàng][số cột];

Cách 2: Khai báo trực tiếp
<Kiểu biến> + <kiểu dữ liệu> + < tên mảng> = new <kiểu dữ liệu> [số hàng][];

Ví dụ khai báo mảng hai chiều kích thước 4*3:

// Cách 1:
private int A[][];
A= new int [4][3];

// Cách 2:
public int A= new int [4][3];

Vậy là xong phần khai báo, dưới đây đến nhập xuất nhé!

3. Nhập xuất mảng hai chiều trong Java

Nhập mảng trong Java tương đối giống với C/C++, sử dụng 2 vòng lặp for lồng nhau để nhập vào từng giá trị một.
Phương thức nhập mảng:

// nhapInt() là phương thức nhập dữ liệu kiểu từ bàn phím do mình tự viết
void nhapMT() {
		A = new int[soHang][soCot];
		System.out.println("Nhap ma tran "+ soHang +" x"+ soCot);
		for(int i=0;i&lt;soHang;i++)
			for(int j=0;j&lt;soCot;j++) {
				System.out.println("A["+(i+1)+"]["+(j+1)+"]: ");
				A[i][j]=nhapInt();
			}
}

Xuất mảng hai chiều cũng tương tự với nhập. Để cho in ra màn hình thành một ma trận đẹp thì cứ hết một hàng bạn lại cho xuống dòng.

	void xuatMT() {
//		System.out.println("MA TRAN "+ soHang +" x"+ soCot);
		for(int i=0;i&lt;soHang;i++) {
			for(int j=0;j&lt;soCot;j++)
				System.out.print(A[i][j]+"\t");
			System.out.print("\n");
		}
	}

4. Các bài tập thường gặp

Ở đây mình sẽ ví dụ hai dạng bài tập về ma trận số nguyên đó là:

  • Sắp xếp ma trận theo cột
  • Đếm các số nguyên có trong ma trận.

Code sắp xếp:

// Sắp xếp ma trận theo cột theo chiều tăng dần
void sortCotDecrease() {
		int temp;
		for(int a=0;a&lt;soCot;a++)
			for(int i=1;i&lt;soHang;i++)
				for(int j=0;j&lt;i;j++)
					if(A[i][a]>A[j][a]) {
						temp=A[i][a];
						A[i][a]=A[j][a];
						A[j][a]=temp;
					}
	}

Code đếm các số nguyên tố có trong ma trận

boolean isPrime(int a) {
		if(a &lt;2)
			return false;
		for(int i=2;i&lt;=a/2;i++)
			if(a%i ==0)
				return false;
		return true;
	}
	int countPrime() {
		int amount=0;
		for(int i=0;i&lt;soHang;i++)
			for(int j=0;j&lt;soCot;j++)
				if(isPrime(A[i][j]))
					amount+=1;
		return amount;
	}

5. Xây dựng lớp MaTran

Lắp ghép các phần trên lại, mình làm hoàn chỉnh thành một bài tập nhỏ:
Xây dựng lớp ma trận với các thuộc tính số hàng, số cột, ma trận A.
Các phương thức: Nhập vào kích thước ma trận, nhập ma trận. In ma trận ra màn hình, sắp xếp ma trận theo cột và đếm số các số nguyên tố có trong mảng.

 /* By admin tailieu.pro
 * https://github.com/duongdinh24
 */
import java.io.DataInputStream;
public class MaTran {
	private int soHang;
	private int soCot;
	private int A[][];
	
	public MaTran() {
		
	}
	
	public MaTran(int soHang, int soCot) {
		this.soHang = soHang;
		this.soCot = soCot;
		A = new int[soHang][soCot];
	}
	int getAij(int i, int j) {
		return A[i][j];
	}
	
	int nhapInt() {
		DataInputStream ip = new DataInputStream(System.in);
		int so;
		try {
			so=Integer.parseInt(ip.readLine());
		}
		catch(Exception e){
			System.out.println("Nhap lai: ");
			so=nhapInt();
		}
		return so;
	}
	void nhapKichThuoc() {
		do {
			System.out.println("Nhap so hang: ");
			soHang=nhapInt();
			if(soHang&lt;=0)
				System.out.println("So hang khong hop le!");
		}
		while(soHang&lt;=0);
		
		do {
			System.out.println("Nhap so cot: ");
			soCot=nhapInt();
			if(soCot&lt;=0)
				System.out.println("So cot khong hop le!");
		}
		while(soCot&lt;=0);
	}
	void nhapMT() {
		A = new int[soHang][soCot];
		System.out.println("Nhap ma tran "+ soHang +" x"+ soCot);
		for(int i=0;i&lt;soHang;i++)
			for(int j=0;j&lt;soCot;j++) {
				System.out.println("A["+(i+1)+"]["+(j+1)+"]: ");
				A[i][j]=nhapInt();
			}
	}
	
	void xuatMT() {
//		System.out.println("MA TRAN "+ soHang +" x"+ soCot);
		for(int i=0;i&lt;soHang;i++) {
			for(int j=0;j&lt;soCot;j++)
				System.out.print(A[i][j]+"\t");
			System.out.print("\n");
		}
	}
	void sortCotDecrease() {
		int temp;
		for(int a=0;a&lt;soCot;a++)
			for(int i=1;i&lt;soHang;i++)
				for(int j=0;j&lt;i;j++)
					if(A[i][a]>A[j][a]) {
						temp=A[i][a];
						A[i][a]=A[j][a];
						A[j][a]=temp;
					}
	}
	
	boolean isPrime(int a) {
		if(a &lt;2)
			return false;
		for(int i=2;i&lt;=a/2;i++)
			if(a%i ==0)
				return false;
		return true;
	}
	int countPrime() {
		int amount=0;
		for(int i=0;i&lt;soHang;i++)
			for(int j=0;j&lt;soCot;j++)
				if(isPrime(A[i][j]))
					amount+=1;
		return amount;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MaTran a = new MaTran();
		a.nhapKichThuoc();
		a.nhapMT();
		a.sortCotDecrease();
		System.out.println("Ma tran sau khi sap xep: ");
		a.xuatMT();
		System.out.println("Ma tran co "+a.countPrime()+" so Prime!");
	}
	
}

Minh họa kết quả chạy chương trình trên:

nhap xuat mang hai chieu trong java

Trên đây là một chút nội dung cơ bản liên quan đến mảng hai chiều, ma trận số nguyên trong Java.
Bạn có thể tham khảo thêm cách cộng hai ma trận, nhân hai ma trận nhé!

Xem thêm các bài viết về lập trình của mình tại đây. Cảm ơn bạn đã ghé thăm website!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *