代码之家  ›  专栏  ›  技术社区  ›  Samuel

为什么我会收到ArrayIndexOutOfBounds异常?

  •  1
  • Samuel  · 技术社区  · 15 年前
    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;
     }
    

    2 3
    2 3
    2 3
    

    矩阵:

    2 3 4
    2 4 3
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   codaddict    15 年前

    我看到两个问题:

    • 你需要确保 列 A 等于 B . 如果这不成立,你不能乘矩阵。
    • 你的 k 0 到 N 哪里 是矩阵的列数 一个 乙
        2
  •  1
  •   L. Cornelius Dol    15 年前

    您已经从matrix_A中提取了第一个索引界限,从matrix_ab[0]中提取了第二个索引界限;您不能保证剩余界限与这些界限有任何关系,因此声明:

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

    访问A和B的所有维度可以访问除A[i]和B[0][j]之外任意数组维度的越界。

        3
  •  0
  •   M.J.    15 年前

    你已经写了

    当您试图检索矩阵b的子数组的长度时

    这将返回3作为长度,因此x和y现在都有3作为值,但是当您试图在索引2处找到矩阵a时,您的矩阵a是2x 3矩阵,这将失败。

    这样可以正常工作。