亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

快速排序 - 線程“main”中的異常 java.lang.ArrayIndexOutOf

快速排序 - 線程“main”中的異常 java.lang.ArrayIndexOutOf

呼喚遠方 2021-12-30 16:36:49
學習編碼,我將參加 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*
查看完整描述

2 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

檢查函數中的第二個if循環qs(),它檢查是否left小于j。您在if語句后添加了分號(可能是意外)。這會導致if無論if條件是否通過,都將執行循環內的語句。

這應該是這樣的:

if(left < j)             //remove semi-colon which was here
    qs(items, left, j);


查看完整回答
反對 回復 2021-12-30
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

問題是您;if語句之后放置了一個,這就是您收到錯誤的原因。因為;,qs()無論if條件如何都會被調用。

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

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


查看完整回答
反對 回復 2021-12-30
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號