为什么我的Java矩阵乘法方法在处理较大矩阵时会产生意外的结果?

编程语言 2026-07-09

我在Java中练习矩阵运算,并尝试使用嵌套循环实现矩阵乘法。

这个方法在一些小矩阵上可以正确工作,但在测试更大的矩阵时,结果不一致,某些数值与我预期的不同。

观察到的行为:

结果矩阵中的某些位置的值不正确,尽管循环看起来是正确的。

预期行为:

对于任何兼容的矩阵尺寸,乘法都应返回正确的矩阵结果。

我已经尝试过:

我检查了嵌套循环,核对了矩阵的维度,并多次检查乘法逻辑,但仍然无法确定错误值的来源。

能否解释我的实现中可能哪里出错?

以下是我当前正在测试的代码:

public class Main {

    public static int[][] multiplyMatrices(int[][] a, int[][] b) {

        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();
        }
    }
}

解决方案

主要问题不是你嵌套循环的结构(这是完全正确的),而是在第三个 for 循环中的算术运算符。

在矩阵乘法中,不应直接将两个矩阵的值相加。数学规则要求你将行元素与列元素相乘,然后将该乘积累加到结果矩阵中。使用 + 运算符而不是 *,会使你的计算变得不正确,导致值不匹配——尤其是在矩阵增大时更是如此。

你只需要在这一行把 + 运算符改成 * 即可:

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        for (int k = 0; k < b.length; k++) {
            // Elements must be multiplied, not added
            result[i][j] += a[i][k] * b[k][j]; 
        }
    }
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章