【问题标题】:(Java) Array Index out of Bounds? [duplicate](Java) 数组索引超出范围? [复制]
【发布时间】:2018-02-27 22:35:30
【问题描述】:

我的代码旨在将两个数组组合成一个更大的数组。这两个数组被接受为方法的参数,该方法将第二个数组添加到第一个数组的末尾,并返回结果。出于某种原因,我收到了arrayIndexOutOfBoundsException。有人可以看看这个并指出我做错了什么吗?谢谢。

public static int[] merge(int[] a1, int[] a2) {
    int[] sum = new int[a1.length + a2.length];
    int x;

    for(x = 0; x < a1.length; x++) {
        sum[x] = a1[x];
    }
    for(int k = x; k < sum.length; k++) {
        sum[k] = a2[k];
    }
    return sum;
}

【问题讨论】:

  • 还有更简单的方法,见:Combine to arrays into one
  • 你传递给方法的数组是什么?你的异常方法和stacktrace是什么?
  • 如果 a1 有 5 个元素,a2 有 1 个元素,第二个 for 循环在尝试取消引用 a2[k] 时会遇到错误。
  • 你想连接两个数组吗?:>
  • 您不是从索引 0 开始第二个循环,即 k != 0。那么您的 sum[k] 将类似于 sum[x + k]。

标签: java arrays indexoutofboundsexception


【解决方案1】:
 for(int k = x; k < sum.length; k++)     sum[k] = a2[k]; // here

suma2 大,所以你正在越界异常

如果你想连接 2 个数组,它必须是这样的:

public static int[] merge(int[] a1, int[] a2) {
    int[] sum = new int[a1.length + a2.length];


    for(int x = 0; x < a1.length; x++) {
        sum[x] = a1[x];
    }
    for(int x=0; x < a2.length; x++) {
        sum[a1.length+x] = a2[x];
    }
    return sum;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多