我正在尝试编写一个递归冒泡排序方法,但我得到了ArrayIndexOutOfBoundsException: 11
。我看不出我做错了什么。
public static int[] recBubSort(int []arr, int n){
if(n > arr.length-1){
return arr;
}
if(arr[n] > arr[n+1]){
swap(arr,n,n+1);
}
return recBubSort(arr,n+1);
}
public static void swap(int arr[], int minPos, int index) {
//System.out.println("SelectionSort SWAP...");
int temp = arr[minPos];
arr[minPos] = arr[index];
arr[index] = temp;
}
答案 0 :(得分:5)
您检查n
是否不大于最后一个允许的索引(length - 1
,但是在下一个if
中,您询问的是arr[n+1]
。
假设您的数组有5个项目。而且您的n
是4.您检查过它并且不超过5-1
。但是n+1
是5,并且没有第5项。
答案 1 :(得分:2)
这一行:
if(arr[n] > arr[n+1]){
您没有检查n+1
是否超出范围。您只需检查n
是否超出范围。
答案 2 :(得分:1)
ArrayIndexOutOfBoundsException意味着 索引为负数或大于或等于数组的大小。 你可以试试这个..
void bubbleSort (double array[], int size)
{
double temp ;
for (int pass = 1; pass < size; pass++)
for (int i = 0; i < size – pass; i++)
if (array [i] > array [i+1])
{
temp = array[i] ;
array[i] = array [i+1] ;
array [i+1] = temp ;
}
}