Kỹ thuật lập trình với mảng 2 chiều trong Java

Đây là bài 20/62 bài của series môn học Ngôn ngữ lập trình Java

1. Nhập xuất mảng 2 chiều trong Java

Sử dụng 2 vòng lặp for lồng nhau để duyệt đến từng phần tử với chỉ số dòng và cột trong mảng 2 chiều. Sau đó, nhập hoặc xuất mảng 2 chiều với các phần tử đó.

import java.util.Scanner;
class Main {
    
    public static void main(String[] args) {
        int[][] matrix = new int[3][4];
        Scanner input = new Scanner(System.in);
        System.out.println("Nhap "+ matrix.length + " dong va " + matrix[0].length + " cot cua matrix:");
	for(int row = 0; row < matrix.length ; row++) {
            for(int column = 0; column < matrix[row].length; column++) {
                matrix[row][column] = input.nextInt(); 
            }
        }
        System.out.println("Xuat matrix co "+ matrix.length + " dong va " + matrix[0].length + " cot:");
        for(int row = 0; row < matrix.length ; row++) {
            for(int column = 0; column < matrix[row].length ; column++) {
                System.out.print(matrix[row][column] + " ");
            }
            System.out.println();
        }
    }
}
Kết quả
Nhap 3 dong va 4 cot cua matrix:
1 2 3 0
4 5 6 9
7 2 5 5
Xuat matrix co 3 dong va 4 cot:
1 2 3 0 
4 5 6 9 
7 2 5 5

Xuất mảng 2 chiều sử dụng vòng lặp for-each

class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3, 0}, 
            {4, 5, 6, 9}, 
            {7, 2, 5, 5}
        };
        //vòng lặp for-each đầu tiên truy cập đến mảng 1 chiều chứa các dòng
        for (int[] innerArray: matrix) {
            //vòng lặp for-each truy cập đến từng phần tử trong các dòng
            for(int data: innerArray) {
                System.out.print(data + " ");
            }
            System.out.println();
        }
    }
}
Kết quả
1 2 3 0 
4 5 6 9 
7 2 5 5

2. Tính tổng các phần tử trong mảng 2 chiều

Sử dụng 2 vòng lặp for lồng nhau để duyệt qua từng phần tử trong mảng 2 chiều. Sau đó, cộng dồn các phần tử này.

class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3, 0}, 
            {4, 5, 6, 9}, 
            {7, 2, 5, 5}
        };
        int total = 0;
        for(int row = 0; row < matrix.length; row++) {
            for(int column = 0; column < matrix[row].length; column++) {
                total += matrix[row][column];
            }
        }
        System.out.println("Tong cac phan tu trong matrix = " + total);
    }
}
Kết quả
Tong cac phan tu trong matrix = 49

3. Tính tổng các phần tử trong mảng 2 chiều theo cột

Duyệt theo số cột trước rồi dựa trên từng cột, cộng dồn các phần tử trong từng dòng tương ứng với cột đó.

class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3, 0}, 
            {4, 5, 6, 9}, 
            {7, 2, 5, 5}
        };
        for(int column = 0; column < matrix[0].length; column++){
            int total = 0;
            for(int row = 0; row < matrix.length; row++){
                total += matrix[row][column];
            }
            System.out.println("Sum for column " + column + " is " + total);
        }
    }
}
Kết quả
Sum for column 0 is 12
Sum for column 1 is 9
Sum for column 2 is 14
Sum for column 3 is 14

4. Tính tổng các phần tử trên đường chéo chính của ma trận

Đường chéo chính của một ma trận A bao gồm các phần tử Ai,j với i=j. Ba ma trận sau đây đều có đường chéo chính được biểu thị bởi các số 1 màu đỏ:

Đường chéo chính của ma trận

Bên dưới là một ma trận được biểu diễn bằng mảng 2 chiều. Các phần tử màu đỏ nằm trên đường chéo chính của ma trận.

Ví dụ đường chéo chính của ma trận

Chương trình tính tổng các phần tử trên đường chéo chính của ma trận trong Java như sau:

class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3, 0}, 
            {4, 5, 6, 9}, 
            {7, 2, 5, 5}
        };
        int total = 0;
        for(int row = 0; row < matrix.length; row++) {
            for(int column = 0; column < matrix[row].length; column++) {
                if(row==column){
                    total += matrix[row][column];
                }
            }
        }
        System.out.println("Tong cac phan tu tren duong cheo chinh cua matrix = " + total);
    }
}
Kết quả
Tong cac phan tu tren duong cheo chinh cua matrix = 11

5. Mảng 2 chiều và phương thức trong Java

5.1. Truyền mảng 2 chiều cho phương thức trong Java

Một mảng 2 chiều là tham số của phương thức thì là truyền tham chiếu. Các bạn có thể đọc lại bài Truyền tham trị và tham chiếu cho phương thức trong Java để hiểu rõ về truyền tham chiếu trong Java.

class Main {
    public static void changeMatrix(int[][] arr){
        arr[0][0]=1; arr[0][1]=0; arr[0][2]=0; arr[0][3]=0;
        arr[1][0]=0; arr[1][1]=1; arr[1][2]=0; arr[1][3]=0;
        arr[2][0]=0; arr[2][1]=0; arr[2][2]=1; arr[2][3]=0;
    }
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3, 0}, 
            {4, 5, 6, 9}, 
            {7, 2, 5, 5}
        };
        System.out.println("Matrix truoc khi goi ham changeMatrix():");
        for(int row = 0; row < matrix.length ; row++) {
            for(int column = 0; column < matrix[row].length ; column++) {
                System.out.print(matrix[row][column] + " ");
            }
            System.out.println();
        }
        changeMatrix(matrix);
        System.out.println("Matrix sau khi goi ham changeMatrix():");
        for(int row = 0; row < matrix.length ; row++) {
            for(int column = 0; column < matrix[row].length ; column++) {
                System.out.print(matrix[row][column] + " ");
            }
            System.out.println();
        }
    }
}
Kết quả
Matrix truoc khi goi ham changeMatrix():
1 2 3 0 
4 5 6 9 
7 2 5 5 
Matrix sau khi goi ham changeMatrix():
1 0 0 0 
0 1 0 0 
0 0 1 0

Rõ ràng, khi truyền mảng matrix vào hàm changeMatrix() thì mảng matrix đã thay đổi.

5.2. Kết quả trả về của một phương thức có thể là một mảng 2 chiều

class Main {
    public static int[][] initMatrix(int row, int col){
        int[][] matrix = new int[row][col];
        matrix[0][0]=1; matrix[0][1]=0; matrix[0][2]=0; matrix[0][3]=0;
        matrix[1][0]=0; matrix[1][1]=1; matrix[1][2]=0; matrix[1][3]=0;
        matrix[2][0]=0; matrix[2][1]=0; matrix[2][2]=1; matrix[2][3]=0;
        return matrix;
    }
    public static void main(String[] args) {
        int row = 3;
        int col = 4;
        int[][] matrix;
        matrix = initMatrix(row, col);
        System.out.println("Matrix duoc khoi tao:");
        for(int i = 0; i < matrix.length ; i++) {
            for(int j = 0; j < matrix[i].length ; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}
Kết quả
Matrix duoc khoi tao:
1 0 0 0 
0 1 0 0 
0 0 1 0

Hàm initMatrix() có kiểu trả về là mảng 2 chiều kiểu int.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Khai báo và khởi tạo mảng 2 chiều (two dimensional array) trong JavaKỹ thuật lập trình sao chép mảng (copy array) trong Java >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.