在 Java 中乘以不同维度的二维数组时遇到问题

Trouble multiplying 2D arrays of different dimensions in Java

我有以下代码,我试图让它将数组 a 乘以数组 b 并生成数组 c。我在这里浏览了几个问题,由于某种原因我无法让数组产生正确的结果,我相信是因为它没有将正确的索引相乘。任何帮助将不胜感激,因为我仍在努力了解数组乘法的工作原理。这是代码:

    class Main
{
  public static void main (String[] args)
  {
    int[][]a = 
    {
      {1,2,3,4},
      {5,6,7,8},
      {9,10,11,12},
      //print array a
    };
    for(int i = 0; i < a[0].length-1; i++)
    {
      for(int j = 0; j < a[0].length; j++)
      {
        System.out.print(a[i][j] + " ");
      }
      System.out.println();
    }


    int[][]b = 
    {
      {-1,-2,-3},
      {-4,-5,-6},
      {-7,-8,-9},
      {-10,-11,-12},
    };
    System.out.println();
    //print array b
    for(int i = 0; i < b.length; i++)
    {
      for(int j = 0; j < b.length-1; j++)
      {
        System.out.print(b[i][j] + " ");
      }
      System.out.println();
    }
    System.out.println();

    int[][]c = new int[a.length][b[0].length];

    if(b.length == a[0].length)
    {
      for(int i = 0; i < a.length; i++)
      {
        for (int j = 0; j < b[0].length; j++)
        {

          for (int k = 0; k < a[0].length; k++)
          {
            c[i][j] = a[i][k]*b[k][j];

          }
         }  
       } 
    }


    else
    { 
      System.out.println("Dimension requirements not satisfied for accurate calculation");
    }
    for(int i = 0; i < c.length; i++)
    {
      for(int j = 0; j < c.length; j++)
      {
        System.out.print(c[i][j] + " ");
      }
      System.out.println();
    }
  }
}

c[i][j] = a[i][k]*b[k][j];更改为c[i][j] += a[i][k]*b[k][j];

@Jeffrey Chen 的回答是正确的,因为在矩阵乘法中,第一个矩阵的每一行乘以第二个矩阵的每一列

在你的情况下,矩阵 a 的第 1 行是 1、2、3、4 矩阵 b 的第 1 列是 -1, -4, -7, -10

所以答案是(1*-1)+(2*-4)+(3*-7)+(4*-10) = -1-8-21-40 = -70

然后矩阵a的第一行乘以矩阵b的第二列

(1*-2)+(2*-5)+(3*-8)+(4*-11) = -2-10-24-44 = -80

以此类推

所以以下是正确的

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