1. 程式人生 > >利用二維陣列實現一個矩陣類:Matrix

利用二維陣列實現一個矩陣類:Matrix

利用二維陣列實現一個矩陣類:Matrix。要求提供以下操作:

1setint row, int col, double value):將第row行第col列的元素賦值為value

2getint rowint col):取第row行第col列的元素;

3width():返回矩陣的列數;

4height():返回矩陣的行數;

5Matrix addMatrix b):返回當前矩陣與矩陣b相加後的結果矩陣;

6Matrix multiply(Matrix b):返回當前矩陣與矩陣b相乘後的結果矩陣。

7print():打印出當前矩陣的值。

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

}