2010-10-26 34 views
1
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:为什么我得到一个ArrayIndexOutOfBounds异常?

2 3 
2 3 
2 3 

matrix_B:

2 3 4 
2 4 3 
+0

因为您试图访问超出数组边界的索引。什么是“矩阵_A”和“矩阵_B”等于? – 2010-10-26 04:04:14

+0

我知道错误是什么..但我忘了添加什么两个数组会是..抱歉编辑,它非常简单化..它只是一个矩阵乘法类型的东西。 – Samuel 2010-10-26 04:05:08

回答

1

两个问题,我可以看到:

  • 你需要确保一些A 列等于号 行B。如果这不成立,你不能乘以矩阵。
  • k循环应该有所不同0N其中N是矩阵A的列数,当前正在改变它,直到矩阵B的列数。
+0

好的,在这个声明中,我们给出了A和B都是兼容的吗?所以有关问题出在哪里的想法? – Samuel 2010-10-26 04:11:30

+0

@Samuel:如果考虑到它们是兼容的,问题1是固定的,则需要修复#2。 – codaddict 2010-10-26 04:14:24

+0

好的,我该如何解决这个问题?我已经超级累了,希望今晚能修正这个问题.. – Samuel 2010-10-26 04:15:39

1

您已经从matrix_A提取了第一个索引,第二个从matrix_B [0]中提取;你有没有保证,剩余的边界以任何方式的联系,这样的声明:

matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j]; 

它访问A和B的所有尺寸可以访问出界任何要么阵列的尺寸,除了A [1] ,和B [0] [j]。

0

你写的是

int y = matrix_B [0] .length;

与您试图检索matrix_b

的子数组的长度,这将返回3的长度,所以x和y现在有两个3的值,但你matrix_a是2X3矩阵,这将失败,当您尝试在索引2处找到matrix_A。

尝试使用int y = matrix_B.length;

这将正常工作。

相关问题