2017-04-19 16 views
0

这里有两种方法可以乘以两个一维数组,每个数组可以包含五个整数,并显示结果的二维(5x5)数组。不幸的是,我没有得到我期待的结果,因为我得到了一个ArrayIndexOutOfBoundsException。我去了我的代码寻找错误,但似乎无法找到错误。该错误消息还告诉我,该错误发生在mult[i][j] = array1[i]*array2[j];声明。使用一维数组的矩阵运算

public static int [][] matrixMult(int [] array1, int [] array2){ 

    int [][] mult = new int [imax][jmax]; 
    int i = 0; 
    int j = 0; 

    while(i < imax){ 
     while(j < jmax){ 

      mult[i][j] = array1[i]*array2[j]; 

      if(j == jmax-1){ 

       i++; 
       j = 0; 

      }else{ 

       j++; 
      } 
     } 
    } 

    return mult; 
} 

public static void print2DArray(int array[][]){ 

    int i = 0; 
    int j = 0; 

    while(i < imax){ 
     while(j < jmax){ 

      System.out.print("(" + i + ", " + j + ") " + array[i][j]); 

      if(j == jmax-1){ 

       i++; 
       j = 0; 

      }else{ 

       j++; 
      } 

     } 
    } 
} 
+0

如果您想要答案,请出示[mcve]。然而,我最好的猜测*是'array1'短于'imax'或'array2'短于'jmax'。无论如何,你依赖于实例变量有点奇怪,因为Java数组知道它们自己的长度。 –

+0

是的,摆脱实例变量并使用数组的长度 –

+1

另外,通过使用for循环而不是while循环可以使代码变得更清晰。 –

回答

1

你应该打破内部循环时j == jmax-1,否则在下一次迭代i将成为5,这将给你ArrayIndexOutOfBoundsException异常。

if(j == jmax-1){ 
    i++; 
    j = 0; 
    break; //exit the inner loop 
}else{ 
    j++; 
}