山科java实验2-7 利用二维数组(double[])实现一个矩阵类:Matrix

版权声明:欢迎转载,但转载时请注明原文地址 https://blog.csdn.net/weixin_42110638/article/details/83382303
  1. 利用二维数组(double[])实现一个矩阵类: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)Matrix transpose():返回当前矩阵的转置矩阵;(8)getMax():返回矩阵中的最大值及其所在行和列;(9)print():以行和列的形式打印出当前矩阵。
package shiyan7;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		matrix2 a = new matrix2(3,4);
		matrix2 b = new matrix2(3,4);
		matrix2 c = new matrix2(4,5);
		for(int i = 0; i < 3; i++) {
			for(int j = 0; j < 4; j++) {
				a.set(i, j, 1);
				b.set(i, j, 2);
			}
		}
		for(int i = 0; i < 4; i++) {
			for(int j = 0; j < 5; j++) {
				c.set(i, j, i+j);
			}
		}
		System.out.println("矩阵A:");
		a.print();
		System.out.println("矩阵B:");
		b.print();
		System.out.println("矩阵C:");
		c.print();
		
		matrix2 apb = a.add(b);
		System.out.println("矩阵A+B:");
		apb.print();
		System.out.println("矩阵A*B:");
		matrix2 bmc = b.multiply(c);
		bmc.print();
		System.out.println("矩阵C的转置矩阵:");
		matrix2 tra = c.transpose();
		tra.print();
		System.out.println("C的转置矩阵中的最大值及其所在行和列:");
		double[] res = c.getMax();
		System.out.println("最大值:"+res[2]+" 在"+ res[0] +"行,"+res[1]+"列");
	}

}
package shiyan7;

public class matrix2 {
	public double [][]a;
    public matrix2(int row,int col)
    {
    	this.a = new double[row][col];
    }
    public void set(int row, int col, double value)
    {
    	    this.a[row][col] = value;
    }
    public double get(int row,int col)
    {
    	    return this.a[row][col];
    }
    public int width()//返回列数
    {
    	return a[0].length;
    }
    public int height()
    {
    	return a.length;
    }
    public matrix2 add(matrix2 m)//两矩阵相加
    {
    	/*
    	matrix2 matrix;
		int row = this.a.length > m.a.length ? this.a.length :m.a.length;
		int col = this.a[0].length > m.a[0].length ? this.a[0].length : m.a[0].length;
		matrix = new matrix2(row,col);
		for(int i = 0;i < m.a.length;i++)
		{
			for(int j = 0;j < m.a[0].length;j++)
			{
				matrix.a[i][j] = m.a[i][j];
			}
	    }
		for(int i = 0;i < m.a.length;i++)
		{
			for(int j = 0;j < m.a[0].length;j++)
			{
				matrix.a[i][j] += this.a[i][j];
			}
		}
		return matrix;
		*/
    	matrix2 t = new matrix2(this.a.length,m.a[0].length);
		for(int i = 0; i < m.a.length; i++) {
			for(int j = 0; j < m.a[0].length; j++) {
				t.set(i, j, this.get(i, j) + m.get(i, j));
			}
		}
		return t;

    }
    public matrix2 multiply(matrix2 m)//两矩阵相乘
    {
    	if(this.a[0].length != m.a.length)
    		return null;
    	matrix2 matrix = new matrix2(this.a.length,m.a[0].length);
    	double sum = 0;
    	for(int i = 0;i < this.a.length;i++)
		{
			for(int j = 0;j < m.a[0].length;j++)
			{
				sum = 0;
				for(int k = 0;k < m.a.length;k++)
				{
					sum += this.a[i][k]*m.a[k][j];
				}
				matrix.a[i][j] = sum;
			}
		}
    	return matrix;
    }
    public void print()
    {
    	for(int i = 0;i < a.length;i++)
    	{
    		for(int j = 0;j < a[0].length;j++)
    		{
    			if(j==0)
    				System.out.print(a[i][j]);
    			else
    				System.out.print(" "+a[i][j]);
    		}
    		System.out.println();
    	}
    	System.out.println();
    }
    public matrix2 transpose() //求转置矩阵
    {
		matrix2 t = new matrix2(this.width(), this.height());
	    for(int i = 0; i <t.height(); i++)
	        for(int j = 0; j < t.width(); j++)
	    		t.set(i, j, this.get(j, i));
	    return t;
	}
	
	public double[] getMax() 
	{
		double max = this.get(0, 0);
		int col = 0;
		int row = 0;
		for(int i = 0; i < this.height(); i++) {
			for(int j = 0; j < this.width(); j++) {
				if(this.get(i, j) > max) {
					max = this.get(i, j);
					col = j;
					row = i;
				}
			}
		}
		double[] res = new  double[3];
		res[0] = col;
		res[1] = row;
		res[2] = max;

		return res;
	}
}



猜你喜欢

转载自blog.csdn.net/weixin_42110638/article/details/83382303
今日推荐