当前位置:  开发笔记 > 编程语言 > 正文

仅当搜索项为偶数时,二进制搜索才会创建infinte循环

如何解决《仅当搜索项为偶数时,二进制搜索才会创建infinte循环》经验,为你挑选了1个好方法。

对于我的班级,我需要制作一个既使用二分搜索又使用线性搜索的程序.线性搜索工作正常,所以我知道问题不在于不存在所需的搜索词.

我试图找到答案,但这似乎是一个非常独特的问题.

我正在从文件中读取书籍列表并将其放入存储标题和ID号的自定义Books类中的数组中.我正在搜索身份证号码,每当身份证号码为奇数时,它就可以正常工作; 如果是偶数,则会产生无限循环.

这是有问题的代码.

private String binarySearch(String indexNumber){

    int left, middle, right, compare;
    String book = null;
    Boolean found = false;

    left = 0;
    right = list.length -1;

    while (found == false) {
        middle = (left + right) / 2;
        compare = list[middle].index.compareTo(indexNumber);

        if (compare == 0) {
            book = list[middle].title;
            found = true;
        } else {
            if (compare > 0) {
                right = middle - 1;
                System.out.println("New Right: " + right);
            } else {
                left = middle + 1;
                System.out.println("New Left: " + left);
            }
        }
    }
    return book;
}

编辑:修改代码

private String binarySearch(String indexNumber){
    int left, middle, right, compare;
    String book = null;
    left = 0;
    right = list.length -1;

    while (left <= right) {
        middle = (left + right) / 2;

        compare = list[middle].index.compareTo(indexNumber);

        if (compare == 0) {
            book = list[middle].title.toString();
            break; //tried a return here and same problem as described below
        } else {
            if (compare > 0) {
                right = middle - 1;
            } else {
                left = middle + 1;
            }
        }

    }
    return book;
}

这修复了无限循环,但它仍然只返回循环之前的空书值(但仅在偶数上,奇数仍然正确显示),即使我将return语句放在当前中断的位置.



1> dasblinkenli..:

二进制搜索的问题在于它坚持找到匹配项; 否则,它根本不会退出.

要解决此问题,请将found == false条件替换为left <= right:

while (left <= right) {
    ...
    if (compare == 0) {
        book = list[middle].title;
        break;
    }
    ...
}

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有