迭代二进制搜索未完成
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
我使用 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