迭代二进制搜索未完成

Iterative binary search does not complete

我使用 while 循环编写了二进制搜索。它搜索匹配的名称并打印它们在并行数组 b[]

中的目标
import java.util.*;

class binarysearch {
    public static void calc() {
        Scanner sc = new Scanner(System.in);
        int l = 0, mid = 0, u = 4, i, f = 0;
        String ns;
        String a[] = { "Amar", "Camelia", "Debopriya", "Gargi", "Harmeet" };
        String b[] = { "Astronaut", "Artist", "Dancer", "Singer", "Engineer" };
        System.out.println("Enter name to be Searched");
        ns = sc.next();
        while (l <= u) {
            mid = (int) ((l + u) / 2);
            if (ns.compareTo(a[mid]) > 0) {
                l = mid + 1;
            } else if (ns.compareTo(a[mid]) < 0) {
                u = mid - 1;
            } else if (ns.compareTo(a[mid]) == 0) {
                f = 1;
            }
        }

        if (f == 1) {
            System.out.println("Name is " + a[mid] + " aim is " + b[mid]);
        } else {
            System.out.println("Name Not Found");
        }
    }
}

问题是终端window没有输出。我可以看到 Enter name to be Searched 的消息,也可以看到我输入字符串并按回车键时的消息。但是没有其他事情发生。有谁知道出了什么问题?

找到匹配项后,您不会退出循环。这是一个无限循环。 试试这个:

...
        while(l<=u)
        {
            mid=(int) ((l+u)/2);
            if(ns.compareTo(a[mid]) > 0)
            {
                l=mid+1;
            }
            else if(ns.compareTo(a[mid])<0)
            {
                u=mid-1;
            }
            else if(ns.compareTo(a[mid])==0)
            {
                f=1;
                break; //<- add this statement
            }
        }
...

通过此更改,我得到以下输出:

Enter name to be Searched

Gargi

Name is Gargi aim is Singer