[英]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.