快速排序-线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException:-1

快速排序-线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException:-1,java,arrays,algorithm,quicksort,Java,Arrays,Algorithm,Quicksort,学习编码,我将在2019年初参加一个新兵训练营,并期待为此做好准备。我有一本Java书籍,其中有以下代码作为快速排序算法的示例,我直接从书中复制了它,它向我提供了IndexOutOfBounds错误。我知道这与正在检查但可能不存在的索引位置有关,但是,我无法具体说明什么是错误的。有什么帮助吗?提前谢谢 // Try This 6-3: A simple version of the Quicksort. class Quicksort { // Set up a call to t

学习编码,我将在2019年初参加一个新兵训练营,并期待为此做好准备。我有一本Java书籍,其中有以下代码作为快速排序算法的示例,我直接从书中复制了它,它向我提供了IndexOutOfBounds错误。我知道这与正在检查但可能不存在的索引位置有关,但是,我无法具体说明什么是错误的。有什么帮助吗?提前谢谢

// Try This 6-3: A simple version of the Quicksort. 

class Quicksort {

    // Set up a call to the actual Quicksort method.
    static void qsort(char items[]) {
        qs(items, 0, items.length-1);
    }

    // A recursive version of Quicksort for characters. 
    private static void qs(char items[], int left, int right)
    {
        int i, j;
        char x, y;

        i = left; j = right;
        x = items[(left+right)/2];

        do {
            while((items[i] < x) && (i < right))
                i++;

            while((x < items[j]) && (j > left))
                j--;

            if(i <= j) {
                y = items[i];
                items[i] = items[j];
                items[j] = y;

                i++; 
                j--;
            }
        } while(i <= j);

        if(left < j);
            qs(items, left, j);

        if(i < right)
            qs(items, i, right);
    }
}

class QSDemo { 
    public static void main(String args[]) {
        char a[] = {'d', 'x', 'a', 'r', 'p', 'j', 'i'};
        int i; 

        System.out.println("Original array: ");

        for(i = 0; i < a.length; i++)
            System.out.print(a[i]);

        System.out.println();

        // now, sort the array
        Quicksort.qsort(a);

        System.out.print("Sorted array: ");

        for(i = 0; i < a.length; i++)
            System.out.print(a[i]);
    }
}*emphasized text*
//试试这个6-3:快速排序的简单版本。
类快速排序{
//设置对实际快速排序方法的调用。
静态void qsort(字符项[]){
qs(项目,0,项目长度-1);
}
//字符快速排序的递归版本。
私有静态void qs(字符项[],左整数,右整数)
{
int i,j;
字符x,y;
i=左;j=右;
x=项目[(左+右)/2];
做{
而((项目[i]左))
j--;

if(i问题是您在
if
语句后放置了一个
,这就是您得到错误的原因。由于
,无论
if
条件如何,都将调用
qs()

    if(left < j); qs(items, left, j); //<------problem
    ____________^

if(leftqs()
函数中的第二个
if
循环,该循环检查
left
是否小于
j
。您添加了一个分号(可能是意外)在
if
语句之后。这会导致执行本应在
if
循环内的语句,而不管
if
条件是否通过

以下是它应该是什么:

if(left < j)             //remove semi-colon which was here
    qs(items, left, j);
if(左
这与javascript有什么关系?
Java
!=
javascript
@ThomasCatinella另一个用户已经更正了标记,你又把它们弄错了。你的代码所用的语言是
Java
而不是
javascript
。我觉得自己既愚蠢又瞎了!我到处都在找。谢谢你r眼睛!@ThomasCatinella没问题!如果你没有任何问题,请关闭该问题。新到Stack。我不知道在哪里/如何关闭该问题tbh。我也不能删除它。@ThomasCatinella close意味着只要单击右键,如果我的答案帮助你解决问题。你不需要删除它。我觉得自己既愚蠢又盲目!我是l到处都是ooking。谢谢你的眼睛!在所有的@ThomasCatinella身上都会出现这种情况。不用出汗。