Java中不同维度的2D数组相乘时出现问题

Java中不同维度的2D数组相乘时出现问题,java,arrays,2d,Java,Arrays,2d,我有下面的代码,我试着用数组a乘以数组b,然后生成数组c。我在这里浏览了几个问题,由于某种原因,我无法让数组产生正确的结果,我相信这是因为它没有将正确的索引彼此相乘。任何帮助都将不胜感激,因为我仍在努力掌握数组乘法的工作原理。代码如下: class Main { public static void main (String[] args) { int[][]a = { {1,2,3,4}, {5,6,7,8}, {9,10,

我有下面的代码,我试着用数组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();
    }
  }
}
主类
{
公共静态void main(字符串[]args)
{
int[]a=
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
//打印数组a
};
对于(int i=0;i
更改
c[i][j]=a[i][k]*b[k][j]
c[i][j]+=a[i][k]*b[k][j]更改
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];

@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];

这样做会得到
-70-80-90-158-184-210-246-288-330
数组,这比两个数组中的任何值都要高,不是吗?我是否循环了太多次?这样做会使我得到
-70-80-90-158-184-210-246-288-330
数组,这比两个数组中的任何值都要高,不是吗?我循环的次数太多了吗?谢谢你们,对于你们和jeffrey,我开始更好地理解java中的数组了谢谢你们,对于你们和jeffrey,我开始更好地理解java中的数组了