簡體   English   中英

使用遞歸二進制搜索進行拼寫檢查-代碼日志

[英]Spell Checking With Recursive Binary Search - StackOverflow

我有此遞歸二進制搜索拼寫檢查器方法。 sArray保存了英格蘭詞典中的單詞列表。 密鑰是您可以發送的任何單詞。 該方法將獲取任何單詞(關鍵字),然后使用遞歸二進制搜索在字典(sArray)中查找它。

我不確定我的遞歸步驟是正確的,在這里我從中間為新的高/低索引加/減1。 但是,當我運行程序時,出現堆棧溢出錯誤,這表明我的遞歸沒有停止。 下面是錯誤。

Exception in thread "main" java.lang.StackOverflowError
at java.lang.String$CaseInsensitiveComparator.compare(String.java:1173)
at java.lang.String.compareToIgnoreCase(String.java:1226)
at Program2.bSearch(Program2.java:111)
at Program2.bSearch(Program2.java:121)

public int bSearch(ArrayList<String> sArray, String key, int lowIndex, int highIndex) {

    if (lowIndex > highIndex) {
        System.out.println("The word was not found " + c);

        c++;
        incorrectWords++;
        return -1;
    }

    mid = (lowIndex + highIndex) / 2;

    if (sArray.get(mid).compareToIgnoreCase(key)==0) {
        correctWords++;
        System.out.println("The word " + sArray.get(mid) + " was found *");
        return mid;
    } else if (sArray.get(mid).compareTo(key) > 0) {

        return bSearch(sArray, key, lowIndex, mid + 1);

    } else {

        return bSearch(sArray, key, mid - 1, highIndex);
    }
}
} else if (sArray.get(mid).compareTo(key) > 0) {

    return bSearch(sArray, key, lowIndex, mid + 1);

} else {

    return bSearch(sArray, key, mid - 1, highIndex);
}

當找不到密鑰時,它將卡住。 它應該是

} else if (sArray.get(mid).compareTo(key) > 0) {
    return bSearch(sArray, key, lowIndex, mid - 1);
} else {
    return bSearch(sArray, key, mid + 1, highIndex);
}

請注意+1-1 要搜索的范圍應單調減小。

調用bSearch函數時,請使用

return bSearch(sArray, key, lowIndex, mid - 1);

return bSearch(sArray, key, mid+1, highIndex);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM