利用二維陣列實現一個矩陣類:Matrix
阿新 • • 發佈:2019-02-01
利用二維陣列實現一個矩陣類:Matrix。要求提供以下操作:
(1)set(int row, int col, double value):將第row行第col列的元素賦值為value;
(2)get(int row,int col):取第row行第col列的元素;
(3)width():返回矩陣的列數;
(4)height():返回矩陣的行數;
(5)Matrix add(Matrix b):返回當前矩陣與矩陣b相加後的結果矩陣;
(6)Matrix multiply(Matrix b):返回當前矩陣與矩陣b相乘後的結果矩陣。
(7)print():打印出當前矩陣的值。
import java.util.*; public class Matrix { private static final int ROW=100; private static final int COL=100; private int r; private int c; private double matrix[][]; public Matrix()//建構函式,初始化 { matrix=new double[ROW][COL];//預設行列分配100空間; this.r=ROW; this.c=COL; for(int i=0;i<ROW;i++) for(int j=0;j<COL;j++) matrix[i][j]=0; } public Matrix(int row,int col)//初始化 { matrix=new double[row][col]; this.r=row; this.c=col; for(int i=0;i<row;i++) for(int j=0;j<col;j++) matrix[i][j]=0; } boolean set(int row, int col, double value) { if(row<0||row>this.r||col<0||col>this.r)//判斷位置是否合法; return false; else { matrix[row][col]=value; return true; } } double get(int row,int col) { return matrix[row][col]; } int width() { return this.c; } int height() { return this.r; } Matrix add(Matrix b)//返回相加後的陣列 { if(this.r!=b.r||this.c!=b.c) { System.out.println("ERROR!"); return null; } Matrix m=new Matrix(r,c); for(int i=0;i<r;i++) for(int j=0;j<c;j++) m.matrix[i][j]=this.matrix[i][j]+b.matrix[i][j]; return m; } Matrix multiply(Matrix b) { if(this.r!=b.c)//如果兩個矩陣不服和相乘條件,輸出錯誤; { System.out.println("ERORR!"); return null; } int r=this.r; int c=b.c; Matrix m=new Matrix(r,c); for(int i=0;i<r;i++)//矩陣的乘法; for(int j=0;j<c;j++) { double s=0; for(int i1=0;i1<r;i1++) for(int j1=0;j1<c;j1++) s=s+this.matrix[i1][j1]*b.matrix[j1][i1]; m.matrix[i][j]=s; } return m; } void print() { for(int i=0;i<this.r;i++) { for(int j=0;j<this.c;j++) System.out.print(matrix[i][j]+" "); System.out.println(); } } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); System.out.print("請輸入第一個矩陣的行和列:");//輸入第一個矩陣 int r=sc.nextInt(); int c=sc.nextInt(); Matrix ma=new Matrix(r,c); double num; for(int i=0;i<r;i++) for(int j=0;j<c;j++) { System.out.print("請輸入第"+(i+1)+"行,第"+(j+1)+"列的元素值:"); num=sc.nextDouble(); ma.set(i,j,num); } System.out.println("第一個矩陣是"+ma.height()+"行,"+ma.width()+"列的矩陣:"); ma.print(); System.out.print("請輸入第二個矩陣的行和列:");//輸入第二個矩陣; r=sc.nextInt(); c=sc.nextInt(); Matrix mb=new Matrix(r,c); for(int i=0;i<r;i++) for(int j=0;j<c;j++) { System.out.print("請輸入第"+(i+1)+"行,第"+(j+1)+"列的元素值:"); num=sc.nextDouble(); mb.set(i,j,num); } System.out.println("第二個矩陣是"+mb.height()+"行,"+mb.width()+"列的矩陣:"); mb.print(); Matrix mc=ma.add(mb); System.out.println("兩個矩陣相加是:"); mc.print(); mc=ma.multiply(mb); System.out.println("兩個矩陣相乘是:"); mc.print(); } }