gpt4 book ai didi

java - startsWith() 返回意外值

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:16 25 4
gpt4 key购买 nike

类项目要求我们读取单个文本文件中包含的 10,514 首歌曲的标题、艺术家和歌词。该项目的当前部分让我们编写一个有序的展开链接列表并在标题字段上运行搜索。还编写了比较器来按标题对列表进行排序。我们必须跟踪查找匹配项所需的比较

测试时,我得到了一些奇怪的结果。例如,运行搜索
angel返回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 ,从而使整个事情短路。添加第二个测试解决了问题。

关于java - startsWith() 返回意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4038610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com