3 回答

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
只需像這樣在兩個(gè) if 條件中添加 continue,
if(j == arr3.length){
newArr[i] = arr[k];
k++;
continue;
}
if(k == arr.length){
newArr[i] = arr3[j];
j++;
continue;
}
所以不管怎樣,另一個(gè)循環(huán)已經(jīng)完成,這就是我們迭代并添加所有值的原因,這樣它就不需要檢查所有其他條件,所以我們可以跳過(guò)它。
還,
for (int i = 0; **i < newArr.length**; i++)
由于您正在檢查“<”。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
這ArrayIndexOutOfBoundsException()
是一個(gè)異常,它的基本意思是在某些時(shí)候您試圖訪(fǎng)問(wèn)具有非法索引的數(shù)組元素。
在某些時(shí)候查看您的代碼后,這里是索引的值:
在循環(huán)中,您arr[k]
使用 k = 5進(jìn)行調(diào)用if(arr[k] > arr3[j])
,這arr
是一個(gè)長(zhǎng)度為 5 的數(shù)組,因此最大索引為 4,這就是為什么您會(huì)遇到越界異常的原因。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的主要問(wèn)題是第一個(gè)陣列完成時(shí)的控制。
我對(duì)您的代碼進(jìn)行了一些調(diào)整,現(xiàn)在可以正常工作了。
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;
}
添加回答
舉報(bào)