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来修复它,我只是不明白为什么需要它?
答案 0 :(得分:5)
arrayScalarMul[x][y] = A[x * num][y * num];
将其更改为
arrayScalarMul[x][y] = num * A[x][y];
您将索引与给定标量相乘,但您应该乘以该索引上的值。
答案 1 :(得分:1)
错误是因为
arrayScalarMul [x] [y] = A [x * num] [y * num];
当与x(或y)相乘时,num使其超出界限。
index-1终止通常用于防止“off by 1 error”,因为你有一个基于0的数组,所以一个大小为n的数组实际上有一个介于0和n-1之间的有效索引。所以我们要么使用&lt;的循环条件。 n或&lt; = n-1。情况并非如此。
如果你的意图是用A [x * num] [y * num]替换A [x] [y]的值,如果这是一个有效的索引,那么添加一个像此
if(x*num - totalx) && (y*num - totaly)
A[x][y] = A[x*num][y*num];
答案 2 :(得分:0)
长度缩短1 也不起作用,因为num
在这里是可变的。
arrayScalarMul[x][y] = A[x * num][y * num];
它产生java.lang.ArrayIndexOutOfBoundsException
。这里* x * num *和 y num *超出了数组索引。