java - 每次有 2 个元素的 for 循环中数组索引超出范围

标签 java arrays loops for-loop

任务是将二维数组转换为简单数组,我尝试通过 for 循环将原始数组的元素复制到新数组,例如

public static void main(String[] args) {
    int[][] a = new int[5][8];
    //initialize the 2-dimensional array with random number range(1~100)
    assignNestedArray(a);
    printNestedArray(a);
    int[] arr=new int[a.length*a[0].length];
    for(int i=0,k=0;i<a.length;++i,k+=a[i].length){
        System.arraycopy(a[i], 0, arr, k, a[i].length);         
    }
    System.out.println(Arrays.toString(arr));
}

public static void printNestedArray(int[][] a){
    for (int[] sub_arr : a) {
        for (int v : sub_arr)
            System.out.print(v+" ");
        System.out.println();
    }
}

public static void assignNestedArray(int[][] a){
    for (int i = 0; i < a.length; ++i)
        for (int j = 0; j < a[i].length; ++j)
            a[i][j] = (int) (Math.random() * 100);
}

显示数组索引越界异常 exception

另一方面,如果我像这样修改数组复制代码:

for(int i=0,k=0;i<a.length;++i){
        System.arraycopy(a[i], 0, arr, k, a[i].length);
        k+=a[i].length;
    }

效果很好,我想知道这两个代码有什么区别,以及如何编写每次更新 2 个元素的 for 循环。 如有任何建议,我们将不胜感激,谢谢。

最佳答案

修改你的循环。您首先递增“i”,然后递增 k,因此当 i==4 时,它再次递增 i,这将是 5,然后您将访问 a[5],这将抛出 ArrayIndexOutOfBoundsException。

        for (int i = 0, k = 0; i < a.length; k += a[i].length,++i) {
            System.arraycopy(a[i], 0, arr, k, a[i].length);
        }

关于java - 每次有 2 个元素的 for 循环中数组索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943902/

相关文章:

java - JDBC 拒绝使用指定的密码

java - 是否可以使用 java 或 python 中的应用程序与 WCF TCP 服务进行通信?

javascript - 通过另一个对象数组引用对对象数组进行排序

java - 如何将数组文字传递给函数?

python - 如何在读取 CSV 文件时将字符串值转换为整数值?

java - 在java库中使用依赖注入(inject)好不好?

java - java中运算符重载的困惑

java - 打印出数组中的元素,元素之间使用逗号

python - 具有相同列表的循环内的反向循环

javascript - 如何将一系列 javascript (jQuery) 按钮 "on clicks"转换为循环?