我正在尝试编写将两个给定矩阵相乘并显示结果的代码。这是到目前为止我记下来的代码:
double firstMatrix[][] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
double secondMatrix[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
double[][] thirdMatrix = multiplyMatrix((firstMatrix), (secondMatrix));
System.out.println("The product of the matrices is ");
for (int i = 0; i < thirdMatrix.length; i++) {
for (int j = 0; j < thirdMatrix[0].length; j++) {
System.out.print(firstMatrix[i][j] + " ");
if (i == 1 && j == 2) {
System.out.print(" * ");
} else {
System.out.print(" ");
}
}
for (int j = 0; j < thirdMatrix[0].length; j++) {
System.out.print(secondMatrix[i][j] + " ");
if (i == 1 && j == 2) {
System.out.print(" = ");
} else {
System.out.print(" ");
}
}
for (int j = 0; j < thirdMatrix[0].length; j++) {
System.out.printf("%.1f", thirdMatrix[i][j]);
}
System.out.println();
}
}
public static double[][] multiplyMatrix(double[][] a, double[][] b) {
double c[][] = new double[3][3];
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < b.length; j++) {
for (int k = 0; k < a.length; k++) {
c[i][j] += ((a[i][k]) * (b[k][j]));
}
}
}
return c;}}
但是,当我尝试执行程序时,由于边界错误,我会收到一个数组索引,这种情况不应该发生,因为我的for循环确保不要超出数组范围。我不知道在哪里更改代码,因为在我尝试执行之前,它看起来还不错。任何帮助都非常感谢。
答案 0 :(得分:1)
如果第一矩阵的尺寸为mxn
,第二矩阵的尺寸为nxp
,则乘积的尺寸为mxp
。对?
因此,三重循环的第二个层次应该迭代乘积数组的第二个维度:
for (int j = 0; j < b.length; j++)
应为:
for (int j = 0; j < b[0].length; j++)
b[0].length
是矩阵b的列数。
也,三重循环的3d级别应为:
for (int k = 0; k < b.length; k++)
b.length
是矩阵b的行数,等于矩阵a的列数。
编辑
在通用版本中,您可以更改以下内容:
double c[][] = new double[3][3];
到
double c[][] = new double[a.length][b[0].length];
答案 1 :(得分:0)
public static void main(String[] args) {
double firstMatrix[][] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
double secondMatrix[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
double[][] thirdMatrix = multiplyMatrix((firstMatrix), (secondMatrix));
System.out.println("The product of the matrices is ");
for (int i = 0; i < thirdMatrix.length; i++) {
for (int j = 0; j <firstMatrix[0].length; j++) {// check this one
System.out.print(firstMatrix[i][j] + " ");
if (i == 1 && j == 2) {
System.out.print(" * ");
} else {
System.out.print(" ");
}
}
for (int j = 0; j <thirdMatrix.length; j++) {
if(i<=1){// you need are condition to stop
System.out.print(secondMatrix[i][j] + " ");
if (i == 1 && j == 2) {
System.out.print(" = ");
} else {
System.out.print(" ");
}
}
}
for (int j = 0; j < thirdMatrix[0].length; j++) {
System.out.print( thirdMatrix[i][j]);
}
System.out.println();
}
}
public static double[][] multiplyMatrix(double[][] a, double[][] b) {
double c[][] = new double[3][3];
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < b[0].length; j++) {// Change b.length to b[0].length;
for (int k = 0; k < a[0].length; k++) {// Change a.length to a[0].length;
c[i][j] += ((a[i][k]) * (b[k][j]));
}
}
}
return c;
}