为什么我得到一个ArrayIndexOutOfBounds异常?

时间:2010-10-26 03:59:23

标签: java arrays exception multidimensional-array

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

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;

这将正常工作。