自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:
package com.shujujiegou01;
public class JuZhenChengFa {
// 计算两个N阶矩阵相乘
public static void squareMult(int[][] a, int[][] b, int[][] c, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
c[i][j] = 0;
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
// 打印矩阵
public static void printArray(int a[][]) {
for (int k = 0; k < a.length; k++) {
for (int l = 0; l < a[k].length; l++) {
// 打印每一个元素及其所在坐标位置
System.out.print(a[k][l] + "-" + "(" + k + "," + l + ")" + ",");
}
System.out.println();
}
}
// 矩阵行列互换
public static void swapRowCloumn(int a[][]) {
int num = a.length;
//是为了方便自己调试,才这么定义的
int e[][] = new int[num][num];
for (int k = 0; k < num; k++) {
for (int l = 0, x = a[k].length; l < x; l++) {
// 打印每一个元素及其所在坐标位置
e[k][l] = a[l][k];
System.out.print(e[k][l] + "-" + "(" + k + "," + l + ")" + ",");
}
System.out.println();
}
}
// 主函数测试
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int b[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int c[][] = new int[3][3];
System.out.println("矩阵A:");
printArray(a);
System.out.println("互换行和列后的A矩阵:");
swapRowCloumn(a);
// printArray(a);
System.out.println("矩阵B:");
printArray(b);
System.out.println("互换行和列后的A矩阵:");
swapRowCloumn(b);
// printArray(b);
// 调用
squareMult(a, b, c, 3);
// 打印
System.out.println("矩阵C:");
printArray(c);
// 调换过后计算的结果
System.out.println("调换行和列的矩阵C:");
swapRowCloumn(c);
}
}
附上运行结果截图:
标红的部分,个人感觉有问题,调用了行列互换方法了,按理来说应该计算c矩阵是按照行列互换后的A矩阵和B矩阵来计算的,应该直接得到红框的答案;但是计算出来发现还是根据旧的A,B矩阵的乘积来计算的。感觉哪里有问题,但是说不上来!!!