Java 矩陣類 實現加法、減法和乘法
阿新 • • 發佈:2019-01-24
java新手 寫的不好/* MatrixDemo.java 2012-11-7 */ import java.util.*; class Matrix{ int row , column; double[][] matrix; //建構函式 Matrix(double[][] matrix){ this.row = matrix.length; this.column = matrix[0].length; this.matrix = new double[this.row][this.column]; for(int i = 0 ; i < this.row ; i++) for(int j = 0 ; j < this.column ; j++) this.matrix[i][j] = matrix[i][j]; } //矩陣加法 Matrix add(Matrix mat2){ double[][] add_result = new double[this.row][this.column]; for(int i = 0 ; i < this.row ; i++) for(int j = 0 ; j < this.column ; j++) add_result[i][j] = this.matrix[i][j]+mat2.matrix[i][j]; return new Matrix(add_result); } //矩陣減法 Matrix minus(Matrix mat2){ double[][] add_result = new double[this.row][mat2.column]; for(int i = 0 ; i < this.row ; i++) for(int j = 0 ; j < this.column ; j++) add_result[i][j] = this.matrix[i][j]-mat2.matrix[i][j]; return new Matrix(add_result); } //矩陣乘法 Matrix multiply(Matrix mat2){ double[][] multiply_result = new double[this.row][mat2.column]; for(int i = 0 ; i < this.row ; i++ ) for(int j = 0 ; j < mat2.column ; j++) for(int k = 0 ; k < mat2.row ; k++ ){ multiply_result[i][j] += this.matrix[i][k]*mat2.matrix[k][j]; } return new Matrix(multiply_result); } //列印函式 void print(){ for(int i = 0 ; i < this.row ; i++){ for(int j = 0 ; j < this.column ; j++){ System.out.print(this.matrix[i][j] + " "); } System.out.println(); } } } public class MatrixDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int row , column; String select , judge; //第一個矩陣 System.out.println("輸入第一個矩陣的行數和列數:"); row = sc.nextInt(); column = sc.nextInt(); double[][] m = new double[row][column]; System.out.println("設定第一個矩陣:"); for(int i = 0 ; i < row ; i++) for(int j = 0 ; j < column ; j++) m[i][j] = sc.nextDouble(); Matrix matrix1 = new Matrix(m); //第二個矩陣 System.out.println("輸入第二個矩陣的行數和列數:"); row = sc.nextInt(); column = sc.nextInt(); m = new double[row][column]; System.out.println("設定第二個矩陣:"); for(int i = 0 ; i < row ; i++) for(int j = 0 ; j < column ; j++) m[i][j] = sc.nextDouble(); Matrix matrix2 = new Matrix(m); //選擇要進行的運算 while(true){ System.out.println("選擇要進行的運算(+/-/*):"); select = sc.next(); if(select.equals("+")){ if(matrix1.row != matrix2.row || matrix1.column != matrix2.column){ System.out.println("錯誤!不符合矩陣運演算法則!"); } else{ Matrix matrix3 = matrix1.add(matrix2); System.out.println("矩陣相加 ="); matrix3.print(); } } if(select.equals("-")){ if(matrix1.row != matrix2.row || matrix1.column != matrix2.column){ System.out.println("錯誤!不符合矩陣運演算法則!"); } else{ Matrix matrix3 = matrix1.minus(matrix2); System.out.println("矩陣相減 ="); matrix3.print(); } } if(select.equals("*")){ if(matrix1.column != matrix2.row){ System.out.println("錯誤!不符合矩陣運演算法則!"); } else { Matrix matrix3 = matrix1.multiply(matrix2); System.out.println("矩陣相乘 ="); matrix3.print(); } } System.out.println("選擇其它運算?(Y/N)"); judge = sc.next(); if(judge.equals("Y")|judge.equals("y")) continue; else break; } sc.close(); } }