代码之家  ›  专栏  ›  技术社区  ›  Jason

startsWith()返回意外值

  •  1
  • Jason  · 技术社区  · 15 年前

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

    t型
    助教 返回62个匹配项,需要8455个比较

    s公司
    南非 返回89个匹配项和必需的7355个比较

    我的搜索算法运行如下:

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

    对于第一步和第二步,我通过
    if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jason    15 年前

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

    然而,在本例中,二进制搜索返回的第一个命中是在0索引处,所以当我向后走时,抛出了ArrayIndexOutOfBoundsException,从而使整个事件短路。增加第二个测试解决了这个问题。