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

Java矩阵乘法方法处理大矩阵时结果异常的原因排查

问题分析与修复

你的矩阵乘法实现存在一个根本性逻辑错误,这直接导致了结果数值不符:

核心错误:把元素相乘写成了元素相加

矩阵乘法的规则是:结果矩阵中result[i][j]的值,是矩阵a第i行与矩阵b第j列对应位置元素的乘积之和,而不是你代码里写的和之和。

看你代码里的关键行:

result[i][j] += a[i][k] + b[k][j];

这里应该用乘法运算符*而非加法+,正确写法为:

result[i][j] += a[i][k] * b[k][j];

额外的健壮性补充

当前代码缺少矩阵可乘性校验:只有当矩阵a的列数等于矩阵b的行数时,两者才能相乘。若传入不兼容矩阵,会直接抛出数组越界异常。可以在方法开头添加校验逻辑:

if (a == null || b == null || a[0].length != b.length) {
    throw new IllegalArgumentException("矩阵维度不兼容,无法进行乘法运算");
}

修正后的完整代码

public class Main {

    public static int[][] multiplyMatrices(int[][] a, int[][] b) {
        // 校验矩阵是否可乘
        if (a == null || b == null || a[0].length != b.length) {
            throw new IllegalArgumentException("矩阵维度不兼容,无法进行乘法运算");
        }

        int rows = a.length;
        int cols = b[0].length;
        int[][] result = new int[rows][cols];

        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                for(int k = 0; k < b.length; k++) {
                    // 修正为乘法运算
                    result[i][j] += a[i][k] * b[k][j];
                }
            }
        }

        return result;
    }

    public static void main(String[] args) {
        int[][] matrix1 = {
            {1, 2},
            {3, 4}
        };

        int[][] matrix2 = {
            {5, 6},
            {7, 8}
        };

        int[][] result = multiplyMatrices(matrix1, matrix2);

        for(int i = 0; i < result.length; i++) {
            for(int j = 0; j < result[0].length; j++) {
                System.out.print(result[i][j] + " ");
            }
            System.out.println();
        }
        // 正确输出:
        // 19 22 
        // 43 50 
    }
}

验证结果

修正后运行测试用例,会输出符合预期的矩阵乘积结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:52:33