1. 程式人生 > >Java 矩陣類 實現加法、減法和乘法

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();

	}

}
java新手 寫的不好