首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >startsWith()返回意外值

startsWith()返回意外值
EN

Stack Overflow用户
提问于 2010-10-27 23:44:44
回答 1查看 352关注 0票数 1

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

测试时,我得到了一些奇怪的结果。例如,运行搜索

天使返回23次匹配,需要552次比较,这与教授给出的答案相吻合。

t返回零匹配,需要9530次比较,其中预期匹配数为1148次。

ta返回62次匹配,需要进行8455次比较。

不返回匹配项,需要进行8383次比较。

sa返回89次匹配和所需的73 55次比较

我的搜索算法如下所示:

  1. 循环通过列表找到第一个匹配的
  2. 循环,通过该列表查找不匹配搜索字段的第一个实例
  3. 将开始对象和结束对象发送到数据结构的子列表方法,该方法遍历这两个对象并构建一个单独的匹配
  4. 匹配返回列表

G 219

对于第一步和第二步,我将当前值与搜索值进行比较

if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))

用一个字母搜索返回false的这一行代码是什么,但是当添加一个a时,就会找到值。最好,我想要一种解决方案,它不需要我手动完成调试器中循环的8000次奇数迭代。此外,教授用期望值对结构进行了测试,我的代码通过了所有测试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-28 00:37:08

我发现问题出在哪里了。在subList方法中,我使用了二进制搜索方法来识别第一个找到的匹配的索引位置。但是,由于二进制搜索只返回它遇到的第一个匹配,所以我有一个循环通过数组向后遍历以找到真正的第一个匹配。

但是,在这种情况下,二进制搜索返回的第一个点击位于0索引处,所以当我向后走时,会抛出一个ArrayIndexOutOfBoundsException,从而短路了整个过程。增加第二个测试解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4038610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档