猫鱼薄荷
2025-07-25 02:56:47
代码如下:
//按照步骤查找矩阵相乘结果,i=1表示第一次结果,i=2表示第二次结果,以此类推,如果i不合法则返回null
private static int[][] getMatrixsMultiByStep(int i, int[][]... matrixs) {
Map result = getMatrixsMultiResult(matrixs);
if(i<=0 || i>result.size()) {
return null;
}
return result.get("" + i);
}
//对个矩阵相乘,临时结果和最终结果保存在Map中
private static Map getMatrixsMultiResult(int[][]... matrixs) {
Map result = new HashMap();
int[][] param = matrixs[0];
for(int i=1; i int[][] matrix = matrixs[i];
param = getMatrixMultiResult(param, matrix);
if(param == null) {
return null;
}
result.put("" + i, param);
}
return result;
}
//两个矩阵相乘,结果为一个矩阵,返回值为空表示两个矩阵不能相乘
private static int[][] getMatrixMultiResult(int[][] matrix1, int[][] matrix2) {
if(matrix2.length <= 0) {
return matrix1;
}
if(matrix1.length<=0 || matrix1[0].length!=matrix2.length) {
return null;
}
int[][] result = new int[matrix1.length][matrix2[0].length];
for(int i=0; i for(int j=0; j result[i][j] = 0;
for(int k=0; k result[i][j] += matrix1[i][k]*matrix2[k][j];
}
}
}
return result;
}
测试程序:
public static void main(String[] args) {
int[][] p1 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p2 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p3 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p4 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] value = getMatrixsMultiByStep(2, p1, p2, p3, p4);
if(value != null) {
for(int i=0; i for(int j=0; j System.out.print(value[i][j] + " ");
}
System.out.println();
}
} else {
System.out.println("矩阵无法相乘!");
}
}
输出结果:
218 293 368
412 553 694
509 683 857
PS:JDK要5.0以上,二维数组模拟矩阵,兼容普通矩阵相乘哦