Lập trình Java – Bài tập xử lý ma trận

Đề bài:
a. Lớp MaTran có các thuộc tính được định nghĩa như sau:
private int soHang, soCot; // Số hàng, số cột của ma trận
private int M[][]; // Mảng 2 chiều chứa các phần tử của ma trận
Xây dựng lớp MaTran có các thuộc tính như trên và các phương thức sau:
- Một số toán tử tạo lập
- Phương thức để nhập thông tin của một ma trận
- Phương thức để hiển thị thông tin của một ma trận
b. Xây dựng lớp XuLyMaTran có các phương thức thực hiện các công việc sau:
- Nhập và hiển thị hai ma trận A, B
- Tính tổng và tích 2 ma trận A, B
Code mẫu
import java.io.DataInputStream; import java.io.IOException; import java.util.Scanner; class MaTran{ private int soHang; private int soCot; private int M[][]; // Toán tử tạo lập MaTran(){} MaTran(int sh, int sc){ soHang=sh; soCot=sc;} MaTran(MaTran X){ this.soHang=X.soHang; this.soCot=X.soCot; this.M=new int[this.soHang][this.soCot]; for(int i=0;i<soHang;i++) for(int j=0;j<soCot;j++) this.M[i][j]=X.M[i][j]; } // Các phương thức public int nhapInt() { // Nhập vào một số nguyên Scanner sc=new Scanner(System.in); int so; String st; try { st=sc.nextLine(); }catch(Exception e) {st="0";} try { so=Integer.parseInt(st); }catch(NumberFormatException ne) {so=0;} return so; } public int getSH() {return soHang;} public int getSC() {return soCot;} public void setSH(int sh) {soHang=sh;} public void setSC(int sc) {soCot=sc;} public void setSH_SC(int sh, int sc) { soHang=sh; soCot=sc; M=new int[sh][sc]; } public void setPhanTu(int pt, int chiSoHang, int chiSoCot) { this.M[chiSoHang][chiSoCot]=pt; } public int getPhanTu(int chiSoHang, int chiSoCot) { return this.M[chiSoHang][chiSoCot]; } public void nhapMT() { System.out.print("Nhap so hang :"); do { soHang=nhapInt(); if(soHang<=0) System.out.print("\t Nhap sai ==> Nhap lai so hang>0 :"); }while(soHang<=0); System.out.print("Nhap so cot :"); do { soCot=nhapInt(); if(soCot<=0) System.out.print("\t Nhap sai ==> Nhap lai so cot>0 :"); }while(soCot<=0); M=new int[soHang][soCot]; for(int i=0;i<soHang;i++) for(int j=0;j<soCot;j++) { System.out.print("["+i+"]["+j+"] ="); M[i][j]=nhapInt(); } } public void hienThiMT() { for(int i=0;i<soHang;i++) { for(int j=0;j<soCot;j++) System.out.print(M[i][j]+"\t"); System.out.println(); } } } public class XuLyMaTran { public MaTran tinhTong(MaTran X, MaTran Y) { MaTran tong=new MaTran(); if(X.getSH()!=Y.getSH() || X.getSC()!=Y.getSC()) { System.out.println("\t 2 Ma tran khac size ==> Khong the cong!"); return tong; } else { int m=X.getSH(); int n=X.getSC(); tong.setSH_SC(m, n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { int sum=X.getPhanTu(i, j)+Y.getPhanTu(i, j); tong.setPhanTu(sum, i, j); } return tong; } } public MaTran tinhTich(MaTran X, MaTran Y) { MaTran tich=new MaTran(); if(X.getSC()!=Y.getSH()){ System.out.println("\t Size cua 2 ma tran khong phu hop ==> Khong the nhan!"); return tich; } else { int m=X.getSH(); int n=Y.getSC(); tich.setSH_SC(m, n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { int tt=0; for(int k=0;k<Y.getSH();k++) tt+=X.getPhanTu(i, k)*Y.getPhanTu(k, j); tich.setPhanTu(tt, i, j); } return tich; } } public static void main(String arg[]) { MaTran A=new MaTran(); MaTran B=new MaTran(); MaTran C=new MaTran(); MaTran D=new MaTran(); XuLyMaTran xl=new XuLyMaTran(); System.out.println("\n ======== NHAP MA TRAN A ========" ); A.nhapMT(); System.out.println("\n ======== MA TRAN A DA NHAP ========" ); A.hienThiMT(); System.out.println("\n ======== NHAP MA TRAN B ========" ); B.nhapMT(); System.out.println("\n ======== MA TRAN B DA NHAP ========" ); B.hienThiMT(); C=xl.tinhTong(A, B); System.out.println("\n ======== MA TRAN TICH D=A*B ========" ); C.hienThiMT(); D=xl.tinhTich(A, B); System.out.println("\n ======== MA TRAN TONG D=A*B ========" ); D.hienThiMT(); } }