【问题标题】:Why am I getting an ArrayIndexOutOfBounds exception?为什么我会收到 ArrayIndexOutOfBounds 异常?
【发布时间】:2010-10-26 03:59:23
【问题描述】:
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;
 }

矩阵_A:

2 3
2 3
2 3

矩阵_B:

2 3 4
2 4 3

【问题讨论】:

  • 因为您试图访问超出数组边界的索引。 matrix_Amatrix_B 等于什么?
  • 我知道错误是什么......但我忘了添加两个数组是什么......抱歉编辑,它非常简单......它只是一个矩阵乘法类型的东西。

标签: java arrays exception multidimensional-array


【解决方案1】:

我可以看到两个问题:

  • 您需要确保 A 的列数等于 B 的行。如果这不成立,您就不能乘以矩阵。
  • 您的k 循环应该从0N 其中N 是矩阵A 的列数,目前您正在改变它直到矩阵B 的列数。

【讨论】:

  • 好的,在这个语句中,我们得到 A 和 B 是兼容的,对吧?那么你知道问题出在哪里吗?
  • @Samuel:如果考虑到它们是兼容的,那么问题 1 已解决,您需要修复 #2。
  • 好的,我该如何解决这个问题?我超级累了,希望今晚能发布下一个修复程序..
  • for(int k = 0; k &lt; y; k++){ 更改为for(int k = 0; k &lt; matrix_A[0].length; k++){ 作为快速修复。
  • 现在运行一些简单的测试.. 非常感谢您的帮助.. 如果您有安卓手机并且不介意,我也将不胜感激.. 查看 Ultimath Beta 并发送给我一些反馈 :) 我喜欢反馈,但人们只是使用它而不告诉我他们的想法。再次感谢!
【解决方案2】:

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

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

访问 A 和 B 的所有维度可能会越界访问除 A[i] 和 B[0][j] 之外的任何一个数组的维度。

【讨论】:

    【解决方案3】:

    你写过

    int y = matrix_B[0].length;

    当您尝试检索 matrix_b 的子数组的长度时

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

    尝试使用 int y = matrix_B.length;

    这将正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2013-02-10
      • 2014-07-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多