为什么ArrayIndexOutOFBoundException在双向冒泡排序?

时间:2017-03-25 09:00:43

标签: java

我无法理解为什么这段代码会产生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;
            }
        }
    }
}

3 个答案:

答案 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 == -1k == a.length。如果您的元素数量奇数,则当ik达到中位数时,for将停止。但是如果元素的数量是对的呢?喜欢10?当i达到5且k达到4时,您将k增加到5并将i减少到4.因此它们永远不会相等。如果i >= k,则需要检查i!=k