Mảng 2 chiều trong java lý thuyết và bài tập vận dụng

Xin chào các bạn, hôm nay mình sẽ tiếp tục với series bài viết chủ đề hướng dẫn lập trình Java, bài học hôm trước mình sẽ trình bày về mảng 1 chiều trong java , bài học hôm nay mình sẽ trình bày về mảng 2 chiều trong Java. Chúng ta sẽ bắt đầu luôn các bạn nhé!.
Bài viết gồm các phần sau đây

1. Thế nào là mảng 2 chiều trong Java?
2. Cú pháp khai báo mảng 2 chiều trong Java?
3. Cấp phát bộ nhớ cho mảng 2 chiều trong Java?
4. Truy suất phần tử của mảng 2 chiều trong Java?
5. Cách duyệt mảng bằng vòng lặp for, for each?
6. Bài tập vận dụng trên mảng 2 chiều.

1. Thế nào là mảng 2 chiều trong Java?
Mảng 2 chiều được hiểu như là mảng 1 chiều, nhưng mỗi phần tử của mảng 1 chiều này sẽ là một mảng 1 chiều khác. Mảng 2 chiều có 2 chỉ mục để lưu trữ các giá trị. Giống như một bảng tính sẽ có a dòng và b cột. Mảng 2 chiều thường được áp dụng để giải các bài toán liên quan đến ma trận.

2. Cú pháp khai báo mảng 2 chiều trong Java?
Giống như cú pháp khai báo của mảng 1 chiều có 2 dạng thì mảng 2 chiều cũng vậy:
Dạng 1:
<Kiểu dữ liệu> tên_mảng [][];
Ví dụ: Khai báo một mảng 2 chiều số nguyên:
int array1 [][];
Dạng 2:
<Kiểu dữ liệu> [][] tên_mảng;
Ví dụ: Khai báo một mảng 2 chiều số nguyên tiếp theo
int [][] array2;
Trong đó,  sẽ biểu thị cho kiểu dữ liệu của các phần tử bên trong mảng (như int, double, String, đối tượng sinh viên,…), tên_mảng là tên của mảng là tên do người dùng đặt, tuân thủ theo quy tắt đặt tên biến trong Java. Các bạn lưu ý 2 cặp ngoặc vuông này [][] sẽ là ký hiệu nhận dạng, đặc trưng cho mảng 2 chiều trong Java.

3. Cấp phát vùng nhớ cho mảng 2 chiều trong Java:
Để có thể cấp phát vùng nhớ cho mảng 2 chiều trong Java ta sử dụng 2 số nguyên dương đại diện cho dòng và cột kết hợp với từ khóa new để cấp phát gồm có 3 dạng như sau:
Dạng 1:  <Kiểu dữ liệu> tên_mảng[][] = new <Kiểu dữ liệu> [Số_phần_tử_của_dòng][Số_phần_tử_của_cột];
Ví dụ khai báo cấp phát vùng nhớ cho mảng số nguyên 2 chiều gồm có 3 dòng và 4 cột:
int array2D [][] = new int [3][4];
Dạng 2:  <Kiểu dữ liệu> [][] tên_mảng = new <Kiểu dữ liệu> [Số_phần_tử_của_dòng][Số_phần_tử_của_cột];
Ví dụ khai báo cấp phát vùng nhớ cho mảng số nguyên 2 chiều gồm có 3 dòng và 4 cột:
int [][] array2D = new int [3][4];
Dạng 3: vừa có thể khai báo mảng và vừa khởi tạo giá trị cho mảng
Ví dụ khai báo mảng một chiều có tên là array2D, kiểu dữ liệu là int và mảng này chứa 9 phần tử gồm có 3 dòng và 3 cột
int[] array2D = new int[][] {{1, 2, 3},{4, 5, 6},{7, 8, 9}};
Quan sát hình bên dưới, mô tả mảng 2 chiều, 3 dòng 4 cột, các chỉ mục dòng, cột tương ứng.

hướng dẫn mảng 2 chiều trong java, chỉ mục mảng 2 chiều

4. Truy xuất phần tử của mảng 2 chiều trong Java
Ta truy xuất các phần tử của mảng thông qua các chỉ số dòng và chỉ số cột của phần tử đó.
Cú pháp: Tên_mảng [Chỉ_số_dòng][Chỉ_số_cột]; 
int[] array2D = new int[][] {{1, 2, 3},{4, 5, 6},{7, 8, 9}};
Ví dụ để truy cập đến phần tử nằm ở dòng 3 và cột 3 của mảng array2D ta làm như sau:

public static void main(String[] args) {
            // khai báo một mảng 2 chiều có 3 dòng và 3 cột
            int[] array2D = new int[][] {{1, 2, 3},{4, 5, 6},{7, 8, 9}};  
            System.out.println(“Phần tử nằm ở dòng 3 và cột 3 trong mảng array2D là: ” + array2D[3][3]);
}

5. Cách duyệt mảng bằng vòng lặp for trong Java
Các bạn cùng quan sát đoạn code sau đây:

public class Array2D {
public static void main(String[] args) {
                int [][] array2D = new int [][] {{1,2,3},{4,5,6},{7,8,9}};
                for (int i = 0; i < array2D.length; i++) {
                                for (int j = 0; j < array2D[0].length; j++) {
                                                System.out.print(array2D[i][j]+” “);
                                }
                                System.out.println();
                }
}
}

Kết quả đạt được:
1 2 3
4 5 6
7 8 9

6. Bài tập vận dụng trên mảng:
Nhập vào từ bàn phím 2 số nguyên đại diện cho số dòng và cột của mảng 2 chiều, sau đó nhập vào các phần tử của mảng 2 chiều đó.
Thực hiện các yêu cầu sau:
a. In ra các phần tử trong mảng
b. Tính tổng các phần tử lẻ trong mảng

c. In ra phần tử có giá trị bé nhất của mảng
Mình sẽ code cho các bạn bài này, sau đó giải thích code cho các bạn dễ hiểu nhé.

public class Array2D2 {
public static void main(String[] args) {
            System.out.println(“Nhập vào số dòng”);
            Scanner input = new Scanner(System.in);
            int dong = input.nextInt();
            System.out.println(“Nhập vào số cột”);
            int cot = input.nextInt();
            int [][] arr2D = new int[dong][cot];
            // code nhập vào mảng 2 chiều
            for (int i = 0; i < dong; i++) {
                        for (int j = 0; j < cot; j++) {
                                    System.out.println(“Nhập vào phần tử tại vị trí arr2D[“+i+”][“+j+”]”);
                                    int temp = input.nextInt();
                                    arr2D[i][j] =temp;
                        }
            }
            // code in ra mảng 2 chiều vừa nhập
            for (int i = 0; i < dong; i++) {
                        for (int j = 0; j < cot; j++) {
                                    System.out.print(arr2D[i][j]+” “);
                        }
                        System.out.println();

Đoạn code ở trên sẽ nhập vào dòng và cột từ bàn phím, sau đó khởi tạo mảng 2 chiều, người dùng sẽ nhập vào các phần tử tương ứng với từng chỉ số dòng, cột. Cuối cùng sẽ in ra được mảng 2 chiều.
Trong đoạn code tiếp theo mình sẽ giải luôn ý b và ý c của bài tập chính là tổng các số lẻ, và in ra số nhỏ nhất trong mảng 2 chiều, các bạn tiếp tục quan sát đoạn code bên dưới.
 

public class Array2D2 {
public static void main(String[] args) {
            System.out.println(“Nhập vào số dòng”);
            Scanner input = new Scanner(System.in);
            int dong = input.nextInt();
            System.out.println(“Nhập vào số cột”);
            int cot = input.nextInt();
            int [][] arr2D = new int[dong][cot];
            // code nhập vào mảng 2 chiều
            for (int i = 0; i < dong; i++) {
                        for (int j = 0; j < cot; j++) {
                                    System.out.println(“Nhập vào phần tử tại vị trí arr2D[“+i+”][“+j+”]”);
                                    int temp = input.nextInt();
                                    arr2D[i][j] =temp;
                        }
            }
            // code in ra mảng 2 chiều vừa nhập
            for (int i = 0; i < dong; i++) {
                        for (int j = 0; j < cot; j++) {
                                    System.out.print(arr2D[i][j]+” “);
                        }
                        System.out.println();
            }
            // tổng các chữ số lẻ
            int sum = 0;
            int min = Integer.MAX_VALUE;
            for (int i = 0; i < dong; i++) {
                        for (int j = 0; j < cot; j++) {
                                    if (arr2D[i][j] %2 !=0) {
                                                sum+= arr2D[i][j];
                                    }
                                    if (min>arr2D[i][j]) {
                                                min = arr2D[i][j];
                                    }
                        }
            }
            System.out.println(“Tổng các số lẻ: “+ sum);
            System.out.println(“Số nhỏ nhất: “+min);
}
}

Giải thích code trên: Phần trên mình sẽ nhập và xuất mảng, phần bên dưới, mình sẽ tạo 2 biến tên là sum và min. lần lượt duyệt qua các phần tử của mảng 2 chiều, kiểm tra nếu phần tử đó lẻ, tức là không chia hết cho 2, mình sẽ cộng dồn tổng lẻ vào biến sum, tương tự nếu phần tử trong mảng có giá trị nhỏ hơn biến min thì mình sẽ gán min hiện tại bằng với phần tử đang được duyệt.
Kết quả đạt được:
kết quả bài tập mảng 2 chiều trong java

Các bạn có thể xem thêm video hướng dẫn chi tiết về mảng 2 chiều trong java của mình tại đây

Kết luận
Qua bài viết này, mình đã hướng dẫn các bạn mảng 2 chiều trong Java theo mình thấy thì cũng không đơn giản chút nào, các bạn chịu khó đọc thêm và luyện tập thật nhiều code mình cũng để sẳn trên website rồi, các bạn có thể copy về chạy thử nhé. Để ủng hộ mình các bạn có thể ghé thăm kênh youtube hướng dẫn lập trình java: https://youtube.com/itforstudent để học thêm các bài học về lập trình Java, chúc các bạn học tập tốt.!