java.lang.ArrayIndexOutOfBounds 异常

标签 java

任何人都可以帮助解决我正在做的家庭作业问题吗?基本上,我要创建的程序要求用户输入一个整数 N,然后输入两组独立的 N 个整数,这些集合存储在两个独立的数组(x 和 y)中,然后是一个函数mixReverse(a, b)xy 作为参数调用。 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/

相关文章:

java - 在 Web 应用程序中实现长时间运行的流程

Java:获取输入整数数组的最有效方法

java - 无法在 android 中显示 ArrayList<String>

java - getter 和 setter 在 recyclerview android 中没有按预期工作

java - Android - onOptionsItemSelected 项目 ID 不匹配

java - spring容器是否为属于同一通用类但使用不同类型的对象创建新的bean?

java - 在 Eclipse 中自动用新导入覆盖旧导入

java - 如何使 JFrame 和 JMenubar 不在 public static void main(String[] args) 中

java - 垃圾收集中的“伊甸园空间”名称来源

java - 分发我不。 n 中的项目数箱子的数量,其中每个箱子具有不同的容量级别 c1、c2