簡體   English   中英

startsWith()返回意外值

[英]startsWith() returning unexpected values

班級項目讓我們閱讀單個文本文件中包含的10,514首歌曲的標題,藝術家和歌詞。 該項目的當前部分讓我們編寫了一個有序的展開鏈表,並在標題字段上進行了搜索。 還編寫了比較器,以按標題對列表進行排序。 我們必須跟蹤找到匹配項所需的比較

測試時,我得到一些奇怪的結果。 例如,運行搜索
天使返回23個匹配項,需要552個比較,這與教授給出的答案匹配

t返回零個匹配項,並且需要9530個比較,其中預期有1148個匹配項
ta返回62個匹配項,並且需要8455個比較

s返回沒有匹配項,並且需要8383個比較
sa返回89個匹配項,並需要7355個比較

我的搜索算法如下運行:

  1. 遍歷列表以查找第一個匹配項
  2. 遍歷列表以查找與搜索字段不匹配的第一個實例
  3. 將開始和結束對象發送到數據結構的Sublist方法,該方法遍歷這兩個對象並構建單獨的匹配項列表
  4. 返回比賽清單

對於第一步和第二步,我將通過以下方式將當前值與搜索值進行比較
if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))

這行代碼通過單個字母搜索返回false的代碼行是什么,但是當添加a時,會找到值? 最好是,我想要一個不需要在調試器中手動完成8000多次循環迭代的解決方案。 另外,教授給結構提供了預期值的測試,我的代碼通過了所有測試。

我發現了問題所在。 在subList方法中,我使用了二進制搜索方法來標識第一個找到的匹配項的索引位置。 但是,由於二進制搜索僅返回遇到的第一個匹配項,因此我有一個循環,可向后遍歷數組以查找真正的第一個匹配項。

但是,在這種情況下,二進制搜索返回的第一個匹配項位於0索引處,因此當我向后走時,拋出ArrayIndexOutOfBoundsException,從而使整個過程短路。 添加第二個測試解決了該問題。

暫無
暫無

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

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