2017-04-19 2 views
0

それぞれが5つの整数を保持する2つの1-D配列を乗算し、その結果の2次元(5×5)配列を表示する2つの方法があります。残念ながら、私はArrayIndexOutOfBoundsExceptionを取得すると期待している結果を得られません。私はバグを探すために自分のコードに行きましたが、エラーを見つけることができませんでした。エラーメッセージはまた、エラーがmult[i][j] = array1[i]*array2[j];ステートメントで発生することを通知します。1-D配列による行列演算

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

また、 'while'ループの代わりに' for'ループを使用するとコードをもっとはっきりさせることができます。 –

答えて

1

あなたはArrayIndexOutOfBoundsExceptionが与える5になりますそれ以外の場合は次の反復iで、内部ループj == jmax-1を破る必要があります。

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