java实现矩阵乘法

题目:试编程实现矩阵乘法


代码:

1.首先需要有两个矩阵,这里用二维数组来表示,通过键入的方式填充二维数组

  

Scanner input = new Scanner(System.in);	
		int m1Hang = 0;  //m1的行数
		int m1Lie = 0;  //m1的列数
		System.out.print("请输入第一个行列式的行数:");  
		m1Hang = input.nextInt();  //通过用户输入来定义m1的行数
		System.out.print("请输入第一个行列式的列数:");
		m1Lie = input.nextInt();  //通过用户输入来定义m1的列数
		double[][] m1 = new double[m1Hang][m1Lie];  //因为数组初始化都需要确定大小,所以把用户输入的信息作为行和列定义 m1的大小
		for(int i=0;i<m1Hang;i++){ 
			for(int j=0;j<m1Lie;j++){  //使用循环来往m1里面填充数字
				int trueHang = i+1; //因为下面要打印第几行第几列提示,这个几是我们通常所说的。但在二维数组中,通常说的第1行其实是计算机里的第0行
				int trueLie = j+1;
				System.out.print("第一个行列式第"+trueHang+"行,第"+trueLie+"列的数字:");
				m1[i][j] = input.nextInt();
			}
		}
		//m2的填充就跟上面同理
		int m2Hang = 0;
		int m2Lie = 0;
		System.out.print("请输入第二个行列式的行数:");
		m2Hang = input.nextInt();
		System.out.print("请输入第二个行列式的列数:");
		m2Lie = input.nextInt();
		double[][] m2 = new double[m2Hang][m2Lie];
		for(int i=0;i<m2Hang;i++){
			for(int j=0;j<m2Lie;j++){
				int trueHang = i+1;
				int trueLie = j+1;
				System.out.print("第二个行列式第"+trueHang+"行,第"+trueLie+"列的数字:");
				m2[i][j] = input.nextInt();
			}
		}

2.有了两个二维数组了,就可以进行乘法运算了。这里使用方法来实现,写一个matrixMultiplier的 方法。这个方法首先应该做判断,如果输入的二维数组不是矩阵,也就是说应先判断m1每一行的列数是否相等以及m2每一行的列数是否相等,只要满足这个条件才是矩阵。还要做一个判断,就是看m1的列数和m2的行数是否相等,否则不能进行行列式的运算。之后就进行行列式运算,这里的算法思路如下图:


最后代码如下:

public static double[][] matrixMultiplier(double[][] m1,double[][] m2){
		int m1Col = 0;  //m1的列数
		int m2Row = 0;  //m2的行数
		int m1Row = 0;  //m1的行数
		int sum = 0;  
		for(int i=0;i<m1.length-1;i++){  //进行第一个判断,看m1每一行的列数是否相等
			if(m1[i].length != m1[i+1].length){
				System.out.println("输入的第一个数组不是矩阵");  //不相等就输出错误信息
				return new double[0][0];
			}else{  //这里是满足了每一行的列数相等的条件才能进行到这里。
				double[] line = m1[i];
				m1Col = line.length;  //m1的列数,赋值给m1Col
				m1Row = m1.length;  //m1的行数,赋值给m1Row
			}
		}
		for(int i=0;i<m2.length-1;i++){  //道理同上,看m2每一行的列数是否相等
			if(m2[i].length != m2[i+1].length){
				System.out.println("输入的第二个数组不是矩阵");
				return new double[0][0];
			}else{
				m2Row = m2.length;  //m2的行数,赋值给m2Row
			}
		}
		if(m1Col != m2Row){   //进行第三个判断,看m1的列数和m2的行数是否相等,否则不能进行行列式的运算
			System.out.println("第一个行列式的列和第二个行列式的行不相等");   //打印报错信息
			return new double[0][0];
		}
		for(int i=0;i<m1Row;i++){  //计算乘积
			for(int j=0;j<m1Col;j++){
				sum += (int) m1[i][j] * (int) m2[j][i];
				System.out.println(m1[i][j] + "*" +m2[j][i]);  //把运行间结果打印出来
			}
			System.out.println(sum);  //把最后的结果打印出来
		}
		
		return new double[0][0];
	}


有了这个计算矩阵相乘的方法后,再在主方法中使用这个方法就好了:

matrixMultiplier(m1,m2);

最后的运行结果如下图:




  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值