为什么我的代码超出范围?

时间:2015-06-24 14:16:12

标签: java indexoutofboundsexception quicksort

我写了这段代码:

class test {

public static void main(String args[]) {
    int array[] = {1,2,3,4,5,6};
    int i = 0;
    int b = 0;
    int c = 0;


    method.dog(i, b, c, array);
}
}

public class method {

static void dog (int i, int b, int c,  int array[]) {

    if (array[i] <= array[c]) {
           if (c == (int) array.length +1 ) {
                int y = array[i];
                array[i] = array[b];
                array[b] =  y;
                if (b == array.length +1) return;
                else  b++; i =b; c=b; dog( i, b, c, array);
           }
            else c++; dog( i, b, c, array);
        }else i ++; c= b; dog( i, b, c, array);
    }
}

我一遍又一遍地遇到同样的问题。它一直说我出界了。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:10)

你知道数组索引从零到数组的大小减1(即它们是从零开始的)吗?因此,有效索引为0array.length - 1(包括),因此您的检查b == array.length +1是错误的,因为它允许高索引。

此外,那些else部分只包含一个小语句,而不是同一行中的其余语句。

答案 1 :(得分:0)

我已修复您的错误,请参阅下面的代码。

static void dog(int i, int b, int c, int array[]) {

    if (c<array.length-1 && array[i] <= array[c] ) {
        if (c <(int) array.length-1) {
            int y = array[i];
            array[i] = array[b];
            array[b] = y;
            if (b < array.length)
                return;
            else
                b++;
            i = b;
            c = b;
            dog(i, b, c, array);
        } else
            c++;
        dog(i, b, c, array);
    } else
        i++;
    c = b;
    dog(i, b, c, array);
}