簡體   English   中英

我正在嘗試合並兩個排序的 arrays 但得到 java.lang.ArrayIndexOutOfBoundsException: 5 無法弄清楚為什么

[英]I'm trying to merge two sorted arrays but getting java.lang.ArrayIndexOutOfBoundsException: 5 can't figure out why

即使在我在遞增之前檢查 j 和 k 的值之后,它也會超出第一個 if 語句的范圍

`int[] Merge(int[]a,int[]b){
int n=a.length+b.length;
int[] sol= new int[n];
int i=0,j=0,k=0;

while(i<n){

if(a[j]<b[k]){

    sol[i]=a[j];

    if(j<a.length)j++;
}
else if(b[k]<a[j]){

        sol[i]=b[k];

        if(k<b.length)k++;

}

i++;

}


return sol;

}`

我不明白數組在哪里越界

考慮當 j=a.length-1 或 k=b.length-1 然后你的 if 條件 [ if(j<a.length)j++ ; if(k<b.length)k++; ] 傳遞並使 j==a.length 為 true 或 k==b.length 為 true 並且當 while 循環拋出 ArrayIndexOutofBound 異常時再次訪問該數組。 此外,您的代碼不處理數組中的常見元素。 請檢查下面的正確代碼

int[] Merge(int[]a,int[]b){
int n=a.length+b.length;
        int[] sol= new int[n];
        int i=0,j=0,k=0;

        while(i<n){
            if(a[j]<=b[k]){ // equality check handles common case

                sol[i++]=a[j++];
                if(j==a.length)
                   break;

            }
            else if(b[k]<a[j]){
                sol[i++]=b[k++];
                if(k==b.length)
                    break ;

            }


        }
        if(j==a.length) {
            while (k != b.length)
                sol[i++]=b[k++];
        }
        if(k==b.length) {
            while (j != a.length)
                sol[i++]=a[j++];
        }
        return sol;
}

問題在這里:

if(j<a.length)j++;

這里當 j = a.length - 1 時,由於 j++,它將變為 a.length。 現在,a[j] 將超出范圍,因為 j = a.length。 a[a.length] 總是超出范圍。 索引從 0 開始,所以最后一個索引是 a.length - 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM