【发布时间】:2012-03-19 17:04:34
【问题描述】:
谁能帮我解决我正在做的作业问题?基本上我试图创建的程序要求用户输入一个整数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
在 lab2part1.mixReverse(lab2part1.java:33)
在 lab2part1.main(lab2part1.java:15)
我知道错误是“抛出以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。”但我无法弄清楚为什么索引是非法的。那么数组的长度是 2*(arr1.length),所以这个 for 循环应该可以正常工作。 J 永远不会是负数,也永远不会等于 arr1.length -1(等于 finalArray 的最终索引)。谁能帮助我找到解决方案?
【问题讨论】:
-
上述失败的输入是什么?
-
finalArray在哪里初始化? -
"那么数组的长度是 2*(arr1.length)"。哪个数组的长度?您确定错误所在的行吗?你确定每个数组的长度吗?设置数组的代码在哪里?您是否尝试过使用调试器?您是否尝试过使用输出语句(
System.out.println或类似语句)来验证执行过程中的不同点是否与您认为的一样?你有没有尝试过任何东西? -
将 sn-p 更改为一个简短但 完整 的程序来演示该问题将非常有帮助...
-
你能说明
finalArray的定义吗?也许你不小心把它创建得太小了。
标签: java