我无法理解为什么这段代码会产生ArrayIndexOutOfBoundsException。 这是我实现双向冒泡排序的代码。
static void bubble(int[] a){
int temp;
for(int i=a.length-1,k=0;i!=k;i--,k++){
for(int j=k;j<i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(int j=i-1;j>k;j--){
if(a[j-1]>a[j]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
}
答案 0 :(得分:2)
我认为是因为那条线:
for(int i=a.length-1,k=0;i!=k;i--,k++)
你增加k并递减i,但你只是检查!=
。但每次的差异是2,所以你不会得到!=
。尝试将其替换为>
:
for(int i=a.length-1,k=0;i>k;i--,k++){
答案 1 :(得分:1)
如果a.length
为4,则i = 3,k = 0。
在下一次迭代中:i = 2,k = 1。
next:i = 1,k = 2
下一个:i = 0,k = 3,j = k,a [j + 1] - &gt; ArrayIndexOutOfBoundsException异常
答案 2 :(得分:0)
你的外表从不检查界限:
for(int i=a.length-1,k=0;i!=k;i--,k++){
如果由于任何原因i
永远不会与k
相等,那么您的for
周期将达到i == -1
和k == a.length
。如果您的元素数量奇数,则当i
和k
达到中位数时,for
将停止。但是如果元素的数量是对的呢?喜欢10?当i
达到5且k
达到4时,您将k
增加到5并将i
减少到4.因此它们永远不会相等。如果i >= k
,则需要检查i!=k
。