Java課程設計 矩陣類 實現加、減、乘法

矩陣類:

// Filename: Matrix.java

class Matrix {

	Matrix(){}

    Matrix(int r, int c)
    {
    	row = r;
    	col = c;
    	matrix = new double[r][c];
    }
    
    Matrix(double [][] m, int r, int c)
    {
    	row = r;
    	col = c;
    	
    	matrix = m;
    }
    
    Matrix(double [][] m) 
    {
    	row = m.length;
    	col = m[0].length;
    	
    	matrix = m;
    }
    
    Matrix add(Matrix b)
    {
    	if((row != b.row) && (col != b.col))
    	{
    		System.out.println("Matrix A can't add Matri B!");
    		System.exit(1);
    	}
    	
    	Matrix tmp = new Matrix(row, col);
    	
    	for(int i = 0; i < row; i++)
    		for(int j = 0; j < col; j++)
    		{
    			tmp.matrix[i][j] = matrix[i][j] + b.matrix[i][j];
    		}
    		
    	return tmp;
    }
    
    Matrix sub(Matrix b)
    {
    	if((row != b.row) && (col != b.col))
    	{
    		System.out.println("Matrix A can't subtract Matri B!");
    		System.exit(1);
    	}
    	
    	Matrix tmp = new Matrix(row, col);
    	
    	for(int i = 0; i < row; i++)
    		for(int j = 0; j < col; j++)
    		{
    			tmp.matrix[i][j] = matrix[i][j] - b.matrix[i][j];
    		}
    		
    	return tmp;
    }
    
    Matrix mul(Matrix b)
    {
    	if(col != b.row)
    	{
    		System.out.println("Matrix A can't multiply Matrix B!");
    		System.exit(1);
    	}
    	
    	Matrix tmp = new Matrix(row, b.col);
    	for(int i = 0; i < row; i++)
    		for(int j = 0; j < b.col; j++)
    		{
    			tmp.matrix[i][j] = 0.0;
    			for(int k = 0; k < b.row; k++)
    			{
    				tmp.matrix[i][j] += matrix[i][k] * b.matrix[k][j];
    			}
    		}
    	return tmp;
    }
    
    void print()
    {
    	for(int i = 0; i < row; i++)
    	{
    		System.out.print(matrix[i][0]);
    		for(int j = 1; j < col; j++)
    		{
    			System.out.print(" " + matrix[i][j]);
    		}
    		System.out.println("");
    	}
    }
    
    private int col;	//列數
    private int row;	//行數
    private double [][] matrix;	//保存矩陣
}

測試程序:

// Filename: MatrixDriveTest

import java.io.*;
import java.util.*;

public class MatrixDriveTest {

    public static void main(String [] args) throws Exception
    {
    	
    	int m, n;	//m保存行數, n保存列數
    	double [][] matrix;	//保存矩陣
    	
    	Scanner in = new Scanner(System.in);
    	
    	System.out.println("Input a m×n matrix...");	
    	
    	m = in.nextInt();
    	n = in.nextInt();
    	
    	matrix = new double[m][n];
    	
    	//System.out.println("m = " + matrix.length);
    	//System.out.println("n = " + matrix[0].length);
    	
    	for(int i = 0; i < m; i++)
    		for(int j = 0; j < n; j++)
    		{
    			matrix[i][j] = in.nextDouble();
    		}
    	
    	Matrix A = new Matrix(matrix);
    	//A.print();
    	
    	System.out.println("Input a m×n matrix...");
    	
    	m = in.nextInt();
    	n = in.nextInt();
    	
    	matrix = new double[m][n];
    	
    	//System.out.println("m = " + matrix.length);
    	//System.out.println("n = " + matrix[0].length);
    	
    	for(int i = 0; i < m; i++)
    		for(int j = 0; j < n; j++)
    		{
    			matrix[i][j] = in.nextDouble();
    		}
    	
    	Matrix B = new Matrix(matrix);
    	
    	//Matrix C = A.add(B);
    	//C.print();
    	//Matrix D = A.sub(B);
    	//D.print();
    	//Matrix E = A.mul(B);
    	//E.print();
    	
    	System.out.println("1. A + b");
		System.out.println("2. A - B");
		System.out.println("3. A * B");
		
		int ch = 0;
		
		System.out.print("Choose your operation: ");
		try{
			BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
			ch = Integer.parseInt(br.readLine());
		}catch(IOException ex){}
		
		Matrix C = new Matrix();
		
		switch(ch)
			{
				case 1:C = A.add(B);C.print();break;
				case 2:C = A.sub(B);C.print();break;
				case 3:C = A.mul(B);C.print();break;
				default:System.out.println("Choice Error!!");break;
			}
    }
    
    
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章