【问题标题】:Why i get - ArrayIndexOutOfBoundsException: 5? [duplicate]为什么我得到 - ArrayIndexOutOfBoundsException:5? [复制]
【发布时间】:2019-11-11 06:58:47
【问题描述】:

我有两个排序数组。我需要将它们都连接到一个新的排序数组中:

    int[] arr1 = {1,2,3,6,8};
    int[] arr2 = {4,5,9,12,208,234};
    printArr(allSort(arr2,arr1));
}

public static int[] allSort(int[] arr, int[] arr3) {

    int[] newArr = new int[arr.length + arr3.length];

    int j = 0;
    int k = 0;

    for (int i = 0; i < newArr.length - 1; i++) {
        if(j == arr3.length){
            newArr[i] = arr[k];
            k++;
        }
        if(k == arr.length){
            newArr[i] = arr3[j];
            j++;
        }
        if(arr[k] > arr3[j]){
            newArr[i] = arr3[j];
            j++;
        } else if (arr[k] < arr3[j]) {
            newArr[i] = arr[k];
            k++;
        }
    }
    return newArr;
}

我尝试构建一个长度等于两个数组加在一起的长度的数组,然后在其上运行一个循环。

但是,此代码返回错误:AArrayIndexOutOfBoundsException: 5

【问题讨论】:

  • arr[k] == arr3[j] 时会发生什么?
  • 将它们添加到单个数组中。然后您可以在 java.utils.Array 中使用 Arrays.sort()。

标签: java arrays loops indexoutofboundsexception


【解决方案1】:

只要像这样在 if 条件中添加 continue,

if(j == arr3.length){
  newArr[i] = arr[k];
  k++;
  continue;
}
if(k == arr.length){
  newArr[i] = arr3[j];
  j++;
  continue;
}

所以无论如何,另一个循环已经完成,这就是我们迭代并添加所有值的原因,因此它不需要检查所有其他条件,因此我们可以跳过它。

还有,

for (int i = 0; **i < newArr.length**; i++)

因为您正在检查“

【讨论】:

  • 我尝试了您的第一个解决方案,但并没有改变问题。我的老师告诉我不要使用任何我们还没有学过的东西。并且我们没有学习继续。所以我不能用它。
  • 我已经编辑了,请尝试一下它会起作用
  • 继续建议有点用,但我不能使用它...我尝试更改循环它仍然是数组索引...:5.
  • 试试这个,boolean check = false; for (int i = 0; i arr3[j]){ newArr[i] = arr3[j]; j++; } else if (!check && arr[k]
  • 它可以工作,但是它缺少两个整数,arr2 中的最后两个数字(208 和 234)加上我想要一个简短的解释......请带我去你的思维方式:)
【解决方案2】:

ArrayIndexOutOfBoundsException() 是一个 Exception,它的基本意思是,在某些时候,您正尝试使用 非法 访问数组的元素指数。有关详细信息,请参阅ArrayIndexOutOfBoundsException Documentation

在某些时候查看您的代码后,这里是索引的值:

在循环中,您在 if(arr[k] &gt; arr3[j]) 中使用 k = 5 调用 arr[k],因为 arr 是一个长度为 5 的数组,因此最大索引为 4,这就是为什么您要退出边界异常。

【讨论】:

  • 如何消除 k = 5?我尝试了ifs来检查它是否为5,但我没有工作
  • @Sufferring 您可以简单地添加一个 if 语句并在 if(k
【解决方案3】:

您的主要问题是控制第一个数组何时完成。

我对您的代码进行了一些调整,现在它可以工作了。

public static void main(String[] args) {
    int[] arr1 = { 1, 2, 3, 6, 8 };
    int[] arr2 = { 4, 5, 9, 12, 208, 234 };

    int[] newArr = allSort(arr1, arr2);

    for (int i = 0; i <= newArr.length - 1; i++) {
        System.out.println(" " + newArr[i]);
    }
}

public static int[] allSort(int[] arr1, int[] arr2) {
    int j = 0;
    int k = 0;
    boolean endArr1 = false;
    int[] newArr = new int[arr1.length + arr2.length];

    for (int i = 0; i <= newArr.length - 1; i++) {
        if (arr1[k] < arr2[j] && !endArr1) {
            System.out.println("k: " + k + " " + arr1.length);
            newArr[i] = arr1[k];
            if(k < arr1.length-1)
                k++;
            else
                endArr1 = true;
       } else if (arr2[j] < arr1[k]  || endArr1) {
           System.out.println("j: " + j + " " + arr2.length);
           newArr[i] = arr2[j];
           if(j < arr2.length-1)
               j++;
         }
    }
    return newArr;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2021-07-12
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多