题目说明:
已知两个矩阵a,b,求a*b
分析:
结果矩阵等于 a的每一行的元素,分别乘b的每一列的元素在相加;
前提:a的列=b的行
|
* |
|
||||||||||
|
我的代码主要分为一下几个模块:
1.从键盘输入矩阵a和b,用到getScanMatrix(A)函数;第一行为矩阵a和b的行,列;接下来输入矩阵的元素,以空格为分隔;
2.矩阵乘积matrixMulitply(A,B)
3.打印矩阵结果
1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 /* 5 * 矩阵乘法 6 * 2 2 2 3(2行2列;2行3列) 7 1 2 1 -1 8 1 2 -3 -1 1 2 9 * */ 10 11 public class case7_MatrixMulity { 12 static Scanner sc=new Scanner(System.in); 13 final static int m1=sc.nextInt();//矩阵1的行 14 final static int m2=sc.nextInt();//矩阵1的列 15 final static int n1=sc.nextInt();//矩阵2的行 16 final static int n2=sc.nextInt();//矩阵2的列 17 18 public static void main(String[] args) { 19 int [][]A = new int[m1][m2]; 20 int [][]B = new int[m2][n1]; 21 //从键盘获取矩阵A和B 22 getScanMatrix(A); 23 getScanMatrix(B); 24 //矩阵乘积所获得的结果矩阵 25 long[][] res=matrixMulitply(A,B); 26 //打印输入矩阵 27 printAB(A); 28 printAB(B); 29 //结果矩阵(类型不同,结果矩形为long型) 30 printMultMarix(res); 31 32 } 33 34 //按行输入矩阵的元素 35 private static void getScanMatrix(int[][] A) { 36 for (int i = 0; i < A.length; i++) { 37 for (int j = 0; j <A[0].length; j++) { 38 A[i][j]=sc.nextInt(); 39 } 40 } 41 } 42 43 //矩阵乘积 44 private static long[][] matrixMulitply(int[][] a, int[][] b) { 45 46 if(m2!=n1) throw new IllegalArgumentException(); 47 48 long[][] X = new long[m1][n2];//定义结果矩阵; 49 50 51 for (int i = 0; i <m1; i++) {//矩阵1的行 52 for (int j = 0; j <n2; j++) {//矩阵2的列 53 for(int k=0;k<m2;k++){//矩阵1的列,矩阵2的行 54 X[i][j]+=a[i][k]*b[k][j]; 55 } 56 } 57 } 58 return X; 59 } 60 61 //打印矩阵 62 private static void printMultMarix(long[][] res) { 63 for(long []arr:res){ 64 for(long e:arr){ 65 System.out.print(e+"\t"); 66 } 67 System.out.println(); 68 } 69 70 } 71 72 static void printAB(int [][]marix){ 73 74 for(int []arr:marix){ 75 for(int e:arr){ 76 System.out.print(e+" "); 77 } 78 System.out.println(); 79 } 80 81 } 82 }
如有错误可在下方评论,感谢反馈!