我正在尝试用Java编写递归冒泡排序,并且我正在获得索引超出边界的异常。我做错了什么,为什么我会收到这个错误? 这是我的代码:
public static <T extends Comparable< ? super T>>
void sort(T [] a){
T tmp;
for(int i=0;i<a.length;i++){
if(a[i].compareTo(a[i+1])>0){
tmp = a[i];
a[i]=a[i+1];
a[i+1]=tmp;
sort(a);
}
System.out.println("i:"+i+" "+a[i]);
}
此外,即使它对数组进行排序,我最后得到错误,它正在打印所有步骤,如何让它打印最后一个最终排序的数组? 可能是一个简单的答案,但我的大脑现在被炸,不能直接思考。 提前谢谢。
答案 0 :(得分:10)
循环应该在i < a.length-1
时停止,因为在您的代码中您可以访问位置i+1
,而在i == a.length - 1
时,i+1
将尝试访问该元素数组的末尾不存在 - 因此,超出范围。
答案 1 :(得分:5)
您已编写循环,以便i
与a.length - 1
一样。然后,您尝试访问a[i+1]
,这是i == a.length - 1
时的越界索引。将循环限制降低1.
答案 2 :(得分:2)
上限应为length-1
for(int i=0;i<a.length-1;i++)
答案 3 :(得分:-1)
试试这个。
public static void bubbleSort(Object[] source, int fromIndex, int endIndex){
if(fromIndex==endIndex){
return;
}
else{
if(((Comparable) source[fromIndex]).compareTo(source [fromIndex+1])>0){
Object temp=source[fromIndex];
source[fromIndex]=source[fromIndex+1];
source[fromIndex+1]=temp;
}
bubbleSort(source,fromIndex+1,endIndex);
}
bubbleSort(source,fromIndex,endIndex-1);
}