你好。需要实现矩阵乘法,代码如下:
public class MatrixMultiplier {
private int[][] transportMatrix(int[][] a) {
int[][] b = new int[a.length][a.length];
for (int i = 0; i < a.length; ++i)
for (int j = 0; j < a.length; ++j) {
b[i][j] = a[j][i];
}
return b;
}
public int[][] multiply(int[][] mA, int[][] mB) {
int mSize = mA.length;
mB = transportMatrix(mB);
int nSize = mB[0].length;
int o = mB.length;
int[][] mResult = new int[mSize][nSize];
for (int i = 0; i < mSize; i++) {
for (int j = 0; j < nSize; j++) {
for (int k = 0; k < o; k++) {
System.out.print(i + " " + j);
mResult[i][j] += mA[i][k] * mB[k][j];
}
}
}
for (int i = 0; i < mResult.length; i++) {
for (int j = 0; j < mResult[0].length; j++) {
System.out.format("%6d ", mResult[i][j]);
}
System.out.println();
}
return mResult;
}
}
public class MatrixMultiply {
private static int[][] mA;
private static int[][] mB;
private static int[][] mResult;
public static void main(String[] args) {
MatrixMultiplier matrixMultiplier = new MatrixMultiplier();
mA = new int[][] {{5,3,2},
{3,1,0},
{1,4,1},
{8,2,1}};
mB = new int[][] {{5,6,2},
{3,1,0},
{1,4,1},
{8,2,1},
{3,1,1}};
mResult = new int[mA.length][mB[0].length];
mResult = matrixMultiplier.multiply(mA, mB);
}
}
结果异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at matrix.MatrixMultiplier.transportMatrix(MatrixMultiplier.java:8)
at matrix.MatrixMultiplier.multiply(MatrixMultiplier.java:15)
at matrix.MatrixMultiply.main(MatrixMultiply.java:23)
为什么?
在错误中,矩阵转置函数和乘法循环中存在问题,您对为元素设置哪些索引感到困惑。在这里,与您的比较,我删除了错误: