为什么我得到 - ArrayIndexOutOfBoundsException: 5?
Why i get - ArrayIndexOutOfBoundsException: 5?
我有两个排序数组。我需要将它们连接到一个新的排序数组中:
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;
}
我尝试构建一个长度等于两个数组加在一起的长度的数组,然后 运行 在其上循环。
但是,这段代码returns错误:AArrayIndexOutOfBoundsException: 5
.
像这样在两个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++)
因为您正在检查“<”。
ArrayIndexOutOfBoundsException()
是 Exception and what it basically means is that at some point you're trying to access a element of an array with an illegal index. Refer to the ArrayIndexOutOfBoundsException Documentation 以获取更多信息。
在查看您的代码后,这里是索引的值:
。
在循环中,您在 if(arr[k] > arr3[j])
中使用 k = 5 调用 arr[k]
,因为 arr
是一个长度为 5 的数组,因此最大索引为 4,即为什么你会遇到越界异常。
您的主要问题是第一个数组完成时的控制。
我对您的代码进行了一些调整,现在可以使用了。
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;
}
我有两个排序数组。我需要将它们连接到一个新的排序数组中:
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;
}
我尝试构建一个长度等于两个数组加在一起的长度的数组,然后 运行 在其上循环。
但是,这段代码returns错误:AArrayIndexOutOfBoundsException: 5
.
像这样在两个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++)
因为您正在检查“<”。
ArrayIndexOutOfBoundsException()
是 Exception and what it basically means is that at some point you're trying to access a element of an array with an illegal index. Refer to the ArrayIndexOutOfBoundsException Documentation 以获取更多信息。
在查看您的代码后,这里是索引的值:
在循环中,您在 if(arr[k] > arr3[j])
中使用 k = 5 调用 arr[k]
,因为 arr
是一个长度为 5 的数组,因此最大索引为 4,即为什么你会遇到越界异常。
您的主要问题是第一个数组完成时的控制。
我对您的代码进行了一些调整,现在可以使用了。
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;
}