Tạo và sử dụng lớp Matrix trong Java



Đề bài: Viết chương trình sử dụng ngôn ngữ lập trình Java tạo và sử dụng lớp Matrix để biểu diễn lớp ma trận bao gồm các phương thức sau:

  1. Matrix(int m, int n): Hàm khởi tạo, với m: số hàng và n: số cột
  2. display(): Hiển thị ma trận theo đúng định dạng
  3. add(Matrix mt2): Cộng 2 ma trận
  4. sub(Matrix mt2): Trừ 2 ma trận
  5. prod(Matrix mt2): Nhân 2 ma trận
  6. transpose(): Chuyển vị ma trận
  7. isSquare(): Kiểm tra ma trận vuông
  8. rowSwap(int h1, int h2): Hoán đổi giữa 2 hàng h1 và h2
  9. colSwap(int c1, int c2): Hoán đổi giữa 2 cột c1 và c2
  10. sumRow(int h): Tính tổng các phần tử trên hàng h
  11. sumCol(int c): Tính tổng các phần tử trên cột c
  12. max(): Tìm phần tử lớn nhất của ma trận
  13. min(): Tìm phần tử nhỏ nhất của ma trận
  14. maxRow(int h): Tìm phần tử lớn nhất của hàng h
  15. minRow(int h): Tìm phần tử nhỏ nhất của hàng h
  16. maxCol(int c): Tìm phần tử lớn nhất của cột c
  17. minCol(int c): Tìm phần tử nhỏ nhất của cột c

Yêu cầu kiến thức:

  • Xác định, chuyển từ đối tượng thực tế sang đối tượng chương trình
  • Xác định thuộc tính và phương thức cho lớp và đối tượng
  • Xác định kiểu dữ liệu cho các thuộc tính và phương thức

Cấu trúc thư mục:
src
|——BuildClass
   |——Matrix.java
|——UseClass
   |——MainClass.java
Code tham khảo dưới đây được viết trên JDK ver 8.x:
File Matrix.java:


package BuildClass;

import java.util.Scanner;

public class Matrix {
    // Gioi han so hang va so cot
    private final int SIZE = 50;

    // Thuoc tinh
    private int m; // so hang
    private int n; // so cot
    private int[][] a;

    // Phuong thuc
    // Ham khoi tao khong doi so
    public Matrix() {
        m = 0;
        n = 0;
        a = new int[m][n];
    }

    // Ham khoi tao co doi so
    public Matrix(int m, int n) {
        if (m >= SIZE || n >= SIZE) {
            m = 3;
            n = 3;
            a = new int[m][n];
        } else {
            this.m = m;
            this.n = n;
            a = new int[m][n];
        }
    }

    // Ham lay thong tin so hang
    public int getRowNum() {
        return m;
    }

    // Ham lay thong ton so cot
    public int getColNum() {
        return n;
    }

    // Nhap ma tran
    public void enterMatrix(Scanner sc) {
        System.out.print("Nhap vao so hang: ");
        m = sc.nextInt();
        System.out.print("Nhap vao so cot: ");
        n = sc.nextInt();
        a = new int[m][n];
        System.out.println("Nhap vao gia tri cho ma tran:");
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print("\tPhan tu thu [" + (i + 1) + "][" + (j + 1) + "]: ");
                a[i][j] = sc.nextInt();
            }
        }
    }

    // Hien thi ma tran
    public void display() {
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }
    }

    // Cong ma tran
    public Matrix add(Matrix mt2) {
        Matrix mtTong = new Matrix(m, n);

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                mtTong.a[i][j] = a[i][j] + mt2.a[i][j];
            }
        }

        return mtTong;
    }

    // Tru ma tran
    public Matrix sub(Matrix mt2) {
        Matrix mtTru = new Matrix(m, n);

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                mtTru.a[i][j] = a[i][j] - mt2.a[i][j];
            }
        }

        return mtTru;
    }

    // Nhan 2 ma tran
    public Matrix prod(Matrix mt2) {
        Matrix mtTich = new Matrix(m, mt2.n);

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < mt2.n; j++) {
                mtTich.a[i][j] = 0;
                for (int k = 0; k < n; k++) {
                    mtTich.a[i][j] += a[i][k] * mt2.a[k][j];
                }
            }
        }

        return mtTich;
    }

    // Chuyen vi ma tran
    public Matrix transpose() {
        Matrix mtTran = new Matrix(n, m);

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                mtTran.a[i][j] = a[j][i];
            }
        }

        return mtTran;
    }

    // Kiem tra ma tran vuong
    public boolean isSquare() {
        return (m == n ? true : false);
    }

    // Hoan doi giua 2 hang h1 va h2
    public void rowSwap(int h1, int h2) {
        for (int i = 0; i < n; i++) {
            int tg = a[h1 - 1][i];
            a[h1 - 1][i] = a[h2 - 1][i];
            a[h2 - 1][i] = tg;
        }
    }

    // Hoan doi giua 2 cot c1 va c2
    public void colSwap(int c1, int c2) {
        for (int i = 0; i < m; i++) {
            int tg = a[i][c1 - 1];
            a[i][c1 - 1] = a[i][c2 - 1];
            a[i][c2 - 1] = tg;
        }
    }

    // Tinh tong phan tu tren hang h
    public int sumRow(int h) {
        int s = 0;

        for (int i = 0; i < n; i++) {
            s += a[h - 1][i];
        }

        return s;
    }

    // Tinh tong phan tu tren cot c
    public int sumCol(int c) {
        int s = 0;

        for (int i = 0; i < m; i++) {
            s += a[i][c - 1];
        }

        return s;
    }

    // Tim phan tu lon nhat cua ma tran
    public int max() {
        int max = a[0][0];

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (max < a[i][j]) {
                    max = a[i][j];
                }
            }
        }

        return max;
    }

    // Tim phan tu nhho nhat cua ma tran
    public int min() {
        int min = a[0][0];

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (min > a[i][j]) {
                    min = a[i][j];
                }
            }
        }

        return min;
    }

    // Tim phan tu lon nhat cua hang h
    public int maxRow(int h) {
        int max = a[h - 1][0];

        for (int i = 1; i < n; i++) {
            if (max < a[h - 1][i]) {
                max = a[h - 1][i];
            }
        }

        return max;
    }

    // Tim phan tu nho nhat cua hang h
    public int minRow(int h) {
        int min = a[h - 1][0];

        for (int i = 1; i < n; i++) {
            if (min > a[h - 1][i]) {
                min = a[h - 1][i];
            }
        }

        return min;
    }

    // Tim phan tu lon nhat cua cot c
    public int maxCol(int c) {
        int max = a[0][c - 1];

        for (int i = 1; i < m; i++) {
            if (max < a[i][c - 1]) {
                max = a[i][c - 1];
            }
        }

        return max;
    }

    // Tim phan tu nho nhat cua cot c
    public int minCol(int c) {
        int min = a[0][c - 1];

        for (int i = 0; i < m; i++) {
            if (min > a[i][c - 1]) {
                min = a[i][c - 1];
            }
        }

        return min;
    }
}

File MainClass.java:


package UseClass;

import BuildClass.Matrix;

import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // Khai bao doi tuong
        Matrix mt1 = new Matrix();
        Matrix mt2 = new Matrix();
        Matrix mtTong;
        Matrix mtTich;

        // Khai bao bien
        int h1, h2;

        // Nhap ma tran
        System.out.println("Nhap vao ma tran thu nhat:");
        mt1.enterMatrix(sc);
        System.out.println("Nhap vao ma tran thu hai:");
        mt2.enterMatrix(sc);

        // Tinh tong 2 ma tran
        mtTong = mt1.add(mt2);

        // Tinh tich 2 ma tran
        mtTich = mt1.prod(mt2);

        // Hien thi
        System.out.println("Ma tran thu nhat vua nhap la:");
        mt1.display();
        System.out.println("Ma tran thu hai vua nhap la:");
        mt2.display();
        System.out.println("Ma tran tong la:");
        mtTong.display();
        System.out.println("Ma tran tich la:");
        mtTich.display();

        // Hoan giua 2 dong h1 va h2 trong ma tran 1
        System.out.println("Hoan doi hang trong ma tran 1:");
        do {
            System.out.print("Nhap vao hang hoan doi thu nhat: ");
            h1 = sc.nextInt();
            System.out.print("Nhap vao hang hoan doi thu hai: ");
            h2 = sc.nextInt();

            if (h1 > mt1.getRowNum() || h2 > mt1.getRowNum()) {
                System.out.println("Hay nhap lai thon tin so hang can hoan doi!");
            }
        } while (h1 > mt1.getRowNum() || h2 > mt1.getRowNum());

        // Hoan doi
        mt1.rowSwap(h1, h2);
        System.out.println("Ma tran 1 sau khi hoan doi la:");
        mt1.display();

        // Hoan doi hang 1 va hang 3 cua mt1
        mt1.colSwap(1, 3); // Minh gia su ma tran vuong 3x3 nhe
        System.out.println("Ma tran 1 sau khi hoan doi cot 1 va cot 2 la:");
        mt1.display();

        // Tinh tong cac phan tu tren hang 3 cua mt1
        mt1.sumRow(3); // Minh gia su ma tran vuong 3x3 nhe

        // Tim max cua mt1
        System.out.println("Phan tu lon nhat cua ma tran 1 la: " + mt1.max());

        sc.close();
    }
}


Kết luận:

  • Bạn có thể tham khảo thêm khóa học lập trình C từ cơ bản đến nâng cao. Xem tại đây
  • Bạn có thể tham khảo thêm khóa học Thành thạo lập trình C#. Xem tại đây
  • Bạn có thể tham khảo thêm khóa học Ôn tập OOP cơ bản trong Java. Xem tại đây

Có thể bạn sẽ thích…

Trả lời

EnglishVietnamese