乘法多维数组

时间:2013-11-21 02:23:41

标签: java arrays

在完成包含两个2D阵列并将它们相乘的程序时遇到了一些麻烦。现在我能够使用设置长度构造这些数组,然后使用数字生成器来创建每个数组。至于第三个数组,我能够确定数组的长度,但是当将三个数组放入一个方法时,我仍然遇到了界限问题。

public class arrayTest1{
  public static void main ( String [] args){
    int matrix1[][] = new int [5][2];

     for (int i = 0; i < matrix1.length; i++) 
       for (int j = 0; j < matrix1[i].length; j++) 
       matrix1[i][j] = (int)(Math.random() * 1000);

      System.out.println("The array 1 is: ");
     for (int i = 0; i < matrix1.length; i++){ 
       for (int j = 0; j < matrix1[i].length; j++){
         System.out.print(matrix1[i][j]+" ");
       }
       System.out.println();
     }

     int matrix2[][] = new int [2][5];

     for (int i = 0; i < matrix2.length; i++) 
       for (int j = 0; j < matrix2[i].length; j++) 
       matrix2[i][j] = (int)(Math.random() * 1000);

      System.out.println("The array 2 is: ");
     for (int i = 0; i < matrix2.length; i++){ 
       for (int j = 0; j < matrix2[i].length; j++){
         System.out.print(matrix2[i][j]+" ");
       }
       System.out.println();
     }

    int matrixSum[][] = new int [matrix1.length][matrix2[0].length];

    matrixMulti(matrix1,matrix2,matrixSum);

     System.out.println("The array mutliplied is: ");
     for (int i = 0; i < matrixSum.length; i++){ 
       for (int j = 0; j < matrixSum[i].length; j++){
         System.out.print(matrixSum[i][j]+" ");
       }
       System.out.println();
     }
  }

  public static void matrixMutli(int [][] m1, int [][] m2,int [][] totalMatrix){


    for(int i = 0; i < m1.length; i++)
      for(int j = 0; j < m2[0].length; j++)
      for(int k = 0; k < totalMatrix.length; k++)
      totalMatrix [i][j] += m1[i][k] * m2[k][j];
  }
}

1 个答案:

答案 0 :(得分:0)

ArrayIndexOutOfBounds是由k变量从0变为5的事实引起的。它需要从0变为2.问题是由于行:

for(int k = 0; k < totalMatrix.length; k++)

矩阵totalMatrix初始化为int matrixSum[][] = new int [matrix1.length][matrix2[0].length];matrix1.length为5.因此totalMatrix.length为5。

要解决此问题,您需要确保kmatrix1[i].lengthmatrix2.length限制。这两个值必须相同,您可以选择成为k的界限。

所以这就是代码:

for(int i = 0; i < m1.length; i++)
   for(int j = 0; j < m2[0].length; j++)
    for(int k = 0; k < m2.length; k++)
      totalMatrix [i][j] += m1[i][k] * m2[k][j];

另外,请考虑添加检查m1[i].length == m2.length的代码,如果没有则抛出IllegalArgumentException。如果您仍然遇到麻烦,请查看matrix multiplication