private void equal_AxB() {
int x = matrix_A.length;
int y = matrix_B[0].length;
matrix_C = new double[x][y];
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++) {
for(int k = 0; k < y; k++){
matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j];
}
}
}
return;
}
matrix_A:
2 3
2 3
2 3
matrix_B:
2 3 4
2 4 3
答案 0 :(得分:1)
我可以看到两个问题:
A
的列等于
行B
。如果这不成立,则无法使矩阵相乘。k
循环应与0
不同
N
其中N
是矩阵A
的列数,目前您要将其更改为矩阵B
的列数。答案 1 :(得分:1)
你已经从matrix_A中提取了第一个索引,而第二个来自matrix_B [0];你不能保证其余的界限与这些界限有关,所以声明:
matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j];
访问A和B的所有维度的可以访问除A [i]和B [0] [j]之外的任何一个数组维度的界限。
答案 2 :(得分:0)
你写过
int y = matrix_B [0] .length;
当您尝试检索matrix_b
的子数组的长度时这将返回3作为长度,因此x和y现在都有3作为值,但是当你尝试在索引2处找到matrix_A时,你的matrix_a是2X3矩阵,这将失败。
尝试使用int y = matrix_B.length;
这将正常工作。