0
public static int[][] scalarMultiplication(int[][] A,int num) {
    int[][] arrayScalarMul = new int[A.length][A[0].length];

    for (int x=0; x < arrayScalarMul.length; x++) {
        for (int y=0; y < arrayScalarMul[x].length; y++) {
            arrayScalarMul[x][y] = A[x * num][y * num];
        }
    }
    return arrayScalarMul;
}

タイトルにエラーが発生していると書かれているようArrayIndexOutOfBoundsExceptionに、長さを 1 短くすることでエラーを修正する人もいますが、なぜそれが必要なのかわかりません。

4

3 に答える 3

5
arrayScalarMul[x][y] = A[x * num][y * num]; 

に変更します

arrayScalarMul[x][y] = num * A[x][y]; 

インデックスに特定のスカラーを乗算していますが、そのインデックスの値を乗算する必要があります。

于 2012-09-25T06:42:48.937 に答える
1

エラーは次の理由によるものです

arrayScalarMul [x] [y] = A [x * num] [y * num];

x(またはy)を掛けると、numは範囲外になります。

インデックス1の終了は通常、「オフバイ1エラー」を防ぐために使用されます。ここで、0ベースの配列があるため、サイズnの配列は、実際には0からn-1の範囲の有効なインデックスを持ちます。したがって、<nまたは<=n-1のループ条件を使用します。これは上記の場合ではありません。

A[x][y]の値をA[x* num] [y * num]に置き換えることが目的の場合、これが有効なインデックスである場合は、次のようなチェックを追加します。

if(x*num - totalx) && (y*num - totaly)
   A[x][y] = A[x*num][y*num];
于 2012-09-25T06:43:16.070 に答える
0

numここで可変であるように、1だけ短い長さも機能しません。

arrayScalarMul[x][y] = A[x * num][y * num];

生産していjava.lang.ArrayIndexOutOfBoundsExceptionます。ここで、* x *num*とynum *は配列インデックスを超えています。

于 2012-09-25T06:49:48.983 に答える