二维数组与矩阵

**题目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():以行和列的形式打印出当前矩阵。
编写测试方法,调用上述方法进行验证。
完整代码如下:

class Matrix{
	double matrix[][];
	public Matrix(int row,int col){
		this.matrix = new double[row][col];

	}//构造函数
	public void set(int row, int col, double value){
		this.matrix[row][col]=value;

	}//将第row+1行第col+1列的元素赋值为value
	public double get(int row,int col){
		return matrix[row][col];
	}//取第row+1行第col+1列的元素
	public int width(){
		return matrix[0].length;
	}//返回矩阵的列数
	public int height(){
		return matrix.length;
	}//返回矩阵的行数
	public Matrix add(Matrix b){
		Matrix sum=new Matrix(this.height(),this.width());
		double s;
		for(int i=0;i<this.height();i++) {//行
			for(int j = 0;j<this.width();j++) {//列
				s=this.get(i,j)+b.get(i, j);
				sum.set(i,j,s);
			}
		}
		return sum;
	}//矩阵相加
	public Matrix multiply(Matrix b){
		if(this.height()!=b.width()) {
			System.out.println("第一个矩阵的行数不等于第二个矩阵的列数,不能进行矩阵相乘运算!");
			return null;
		}
		Matrix sum=new Matrix(this.height(),b.width());
		double s=0;
		for(int i=0;i<this.height();i++) {
			for(int j=0;j<b.width();j++) {
				for(int m=0;m<b.height();m++) {
					s=s+this.get(i, m)*b.get(m, j);
				}
				sum.set(i, j, s);
			}
		}
		return sum;
	}//矩阵相乘
	public Matrix transpose(){
		Matrix t=new Matrix(this.height(),this.width());
		for(int i=0;i<this.height();i++) {
			for(int j=0;j<this.width();j++) {
				t.set(i, j, this.get(j, i));
			}
		}
       return t;
	}//求转置矩阵
	double[] getMax(){
		double max=get(0,0);
		int row=0;
		int col=0;
		for(int i = 0; i <=height()-1; i++){
			for(int j = 0; j <=width()-1; j++) {
				if(this.get(i, j) > max) {
					max = get(i, j);
					col = j;
					row = i;
				}
			}
		}
		double[] mix = new  double[3];
		mix[0] = col+1;
		mix[1] = row+1;
		mix[2] = max;

		return mix;

	}//返回矩阵中的最大值及其所在行和列
	void print(){
		for(int i=0;i<this.height();i++) {
			for(int j=0;j<this.width();j++) {
				System.out.print(this.get(i, j)+" ");
			}
			System.out.println();
		}
	}//以行和列的形式打印出当前矩阵
}
public class One {
	public static void main(String args[]){
		//1.创建一个5行5列,每个元素为1的矩阵,
		//和一个5行5列,每个函数为3的矩阵,
		//同时测试了set()函数和print()函数
		Matrix a=new Matrix(5,5);
		for(int i=0;i<5;i++) {
			for(int j=0;j<5;j++) {
				a.set(i, j, 1);
			}
		}
		Matrix b=new Matrix(5,5);
		for(int i=0;i<5;i++) {
			for(int j=0;j<5;j++) {
				b.set(i, j, 3);
			}
		}
		System.out.println("a矩阵为:");
		a.print();
		System.out.println("b矩阵为:");
		b.print();
		//2.测试get()函数
		a.set(3, 4, 5);
		System.out.println("a矩阵第4行第5列的元素为:"+a.get(3, 4));
		
		//3.测试width()函数和height()函数
		System.out.println("a矩阵的行数为"+a.height()+",a矩阵的列数为"+a.width());
		//4.测试add()函数
		Matrix ab=a.add(b);
		System.out.println("a矩阵加b矩阵为:");
		ab.print();
		//5.测试multiply()函数
		Matrix axb=a.multiply(b);
		System.out.println("a矩阵乘b矩阵为:");
		axb.print();
		//6.测试transpose()函数
		System.out.println("将a矩阵第2行第2列的元素改为6后,新的a矩阵为:");
		a.set(1, 1, 6);
		a.print();
		Matrix c=a.transpose();
		System.out.println("新的a矩阵的转置矩阵为:");
		c.print();
		//7.测试getMax()函数
		System.out.println("现在a矩阵中的最大值为:"+a.getMax()[2]);
		System.out.println("在第"+a.getMax()[0]+"行,第"+a.getMax()[1]+"列");
	}
}

运行截图如下:
在这里插入图片描述
**题目2:**打印乘法口诀表
(1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作。
(2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法口诀表。
完整代码如下:

class Chengfabiao{
	int matrix[][];
	public Chengfabiao(int row,int col){
		this.matrix = new int[row][col];

	}//构造函数
	public void set(int row, int col, int value){
		this.matrix[row][col]=value;

	}//将第row行第col列的元素赋值为value
	public int get(int row,int col){
		return matrix[row][col];
	}//取第row行第col列的元素
	public int width(){
		return matrix[0].length;
	}//返回矩阵的列数
	public int height(){
		return matrix.length;
	}//返回矩阵的行数
	void print(){
		for(int i=0;i<this.height();i++) {
			for(int j=0;j<this.width();j++) {
				System.out.print(i+"*"+j+"="+this.get(i, j)+" ");
			}
			System.out.println();
		}
	}//以行和列的形式打印出当前矩阵
}
public class Two {
	public static void main(String args[]) {
		Chengfabiao m=new Chengfabiao(10,10);
		for(int i=0;i<m.height();i++) {
			for(int j=0;j<m.width();j++) {
				m.set(i, j, i*j);
			}
			
		}
		m.print();
	}
}

运行截图:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值