在测试时,我得到了一些奇怪的结果。例如,运行搜索 天使 t型 助教 返回62个匹配项,需要8455个比较 s公司 南非 返回89个匹配项和必需的7355个比较
我的搜索算法运行如下:
对于第一步和第二步,我通过 if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))
if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))
这行代码通过一个字母搜索返回false,但是当添加a时,会找到值,这是怎么回事?最好是,我想要一个解决方案,它不需要我在调试器中手动遍历8000多个循环迭代。此外,教授用期望值对结构进行了测试,我的代码通过了所有测试。
我发现了问题所在。在子列表方法中,我使用二进制搜索方法来识别第一个找到匹配项的索引位置。但是,由于二进制搜索只返回它遇到的第一个匹配项,所以我有一个循环来向后遍历数组以找到真正的第一个匹配项。
然而,在本例中,二进制搜索返回的第一个命中是在0索引处,所以当我向后走时,抛出了ArrayIndexOutOfBoundsException,从而使整个事件短路。增加第二个测试解决了这个问题。