麻烦在Java中乘以不同维度的2D数组

时间:2017-09-21 01:39:16

标签: 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,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();
    }
  }
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

@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

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

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

等等

所以以下是正确的

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