You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java矩阵乘法代码触发Index Out of Bounds Exception的问题排查

矩阵乘法代码抛出ArrayIndexOutOfBoundsException的问题分析

这种只在非对称矩阵相乘时触发的数组越界异常,核心原因是矩阵维度处理逻辑出错,常见的问题点有以下几个:

1. 结果矩阵维度初始化错误

矩阵乘法的规则是:若A是m×n矩阵,B是n×p矩阵,结果矩阵必须是m×p维度。如果错误地将结果矩阵初始化为其他维度(比如跟着B的行数或A的列数走),后续赋值或输出时必然会触发越界。

比如计算1×3矩阵乘3×1矩阵时,结果应该是1×1矩阵,若代码里错误地把结果矩阵初始化为new int[3][1],后续即使计算逻辑没问题,输出时也可能因为遍历范围错误触发异常。

2. 循环边界取值错误

不管是计算过程还是结果输出,循环的边界必须严格对应结果矩阵的维度,而非原矩阵的维度。比如:

  • 计算时,遍历结果矩阵的行应该用result.length(即A的行数),列应该用result[0].length(即B的列数)
  • 如果错误地把列的循环边界设为A的列数(比如3),而结果矩阵的列数实际是1,当循环到j=1时,result[i][j]就会抛出「索引1超出长度1」的异常——这完全匹配你遇到的报错场景。

3. 输出结果时的维度混淆

很多人写完乘法逻辑后,输出矩阵时偷懒直接复用原矩阵的维度循环。比如遍历结果矩阵时,列数用了A的列数而非结果矩阵的列数:

// 错误的输出代码示例
for (int i = 0; i < result.length; i++) {
    // 这里错误使用了a[0].length,而非result[i].length
    for (int j = 0; j < a[0].length; j++) {
        System.out.print(result[i][j] + " ");
    }
}

当结果矩阵是1×1,而A的列数是3时,j循环到1就会访问result[0][1],直接触发越界。

修正后的参考代码

下面是正确的矩阵乘法实现,包含合法性校验和维度处理逻辑:

public static int[][] multiplyMatrices(int[][] a, int[][] b) {
    // 先校验矩阵是否可相乘:a的列数必须等于b的行数
    if (a[0].length != b.length) {
        throw new IllegalArgumentException("矩阵无法相乘:a的列数与b的行数不匹配");
    }

    int rowsA = a.length;
    int colsA = a[0].length;
    int colsB = b[0].length;
    // 结果矩阵维度严格遵循m×p规则
    int[][] result = new int[rowsA][colsB];

    for (int i = 0; i < rowsA; i++) {
        for (int j = 0; j < colsB; j++) {
            int sum = 0;
            for (int k = 0; k < colsA; k++) {
                sum += a[i][k] * b[k][j];
            }
            result[i][j] = sum;
        }
    }
    return result;
}

// 正确的矩阵输出方法
public static void printMatrix(int[][] matrix) {
    for (int[] row : matrix) {
        for (int num : row) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

排查建议

  1. 先检查结果矩阵的初始化代码,确认是new int[a.length][b[0].length]
  2. 核对所有循环的边界条件,确保行和列的循环范围对应结果矩阵的维度
  3. 输出结果时,严格遍历结果矩阵自身的行和列长度

内容的提问来源于stack exchange,提问作者Nimesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:57:51