亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我得到 - ArrayIndexOutOfBoundsException: 5?

為什么我得到 - ArrayIndexOutOfBoundsException: 5?

侃侃爾雅 2023-02-23 18:02:42
我有兩個排序數組。我需要將它們連接到一個新的排序數組中:    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。
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

只需像這樣在兩個 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++)

由于您正在檢查“<”。


查看完整回答
反對 回復 2023-02-23
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

ArrayIndexOutOfBoundsException()是一個異常,它的基本意思是在某些時候您試圖訪問具有非法索引的數組元素。

在某些時候查看您的代碼后,這里是索引的值:

http://img1.sycdn.imooc.com/63f739f60001786b01400028.jpg

在循環中,您arr[k]使用 k = 5進行調用if(arr[k] > arr3[j]),這arr是一個長度為 5 的數組,因此最大索引為 4,這就是為什么您會遇到越界異常的原因。


查看完整回答
反對 回復 2023-02-23
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

您的主要問題是第一個陣列完成時的控制。


我對您的代碼進行了一些調整,現在可以正常工作了。


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;

}


查看完整回答
反對 回復 2023-02-23
  • 3 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號