任何人都可以帮助解决我正在做的家庭作业问题吗?基本上,我要创建的程序要求用户输入一个整数 N
,然后输入两组独立的 N 个整数,这些集合存储在两个独立的数组(x 和 y)中,然后是一个函数mixReverse(a, b)
以 x
和 y
作为参数调用。 mixReverse(x,y)
函数反转 y 数组中元素的顺序,然后将每个数组的元素交织成一个最终数组,这样 finalArray
包含arr1[0]、arr2[arr2.length-1]、arr1[1]、arr2[arr2.length-2]、... arr1[arr1.length-1]、arr2[0]。
我试过这段代码,但它有问题:
finalArray[0] = arr1[0];
finalArray[1] = arr1[0];
for (int j=2; j<(2*arr1.length); j++) {
if (j%2==0) {
finalArray[j] = arr1[j/2];
}
else {
finalArray[j] = arr2[(((j+1)*(2))-1)];
}
}
特别是这一行:finalArray[j] = arr1[j/2];
抛出错误:
java.lang.ArrayIndexOutOfBoundsException: 7
at lab2part1.mixReverse(lab2part1.java:33)
at lab2part1.main(lab2part1.java:15)
我知道错误是“抛出以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。”但我不知道为什么索引是非法的。那么数组的长度是 2*(arr1.length),所以这个 for 循环应该可以正常工作。 J 永远不会是负数,也永远不会等于 arr1.length -1(等于 finalArray 的最终索引)。谁能帮我找到解决方案?
最佳答案
我会这样做(没有不可读的 %2 和 if 语句)
int[] finalArray = new int[ 2 * N ];
for ( int i = 0; i < N; i++ ){
finalArray[ 2 * i ] = array1[ i ];
finalArray[ 2 * i + 1 ] = array2[ array2.length - i - 1 ];
}
关于java.lang.ArrayIndexOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774520/