我尝试运行此代码以使用二进制搜索来搜索名称,但它无效。 这段代码或方法出了什么问题?
public static int BinarySearchForStudentsName(String StudentName[],String Name) {
int left = 0;
int right = count - 1;
int middle;
while (true) {
middle = (left + right) / 2;
int copmarison = Name.compareTo(StudentName[middle]);
if (Name.equals(StudentName[middle])) {
return middle;
} else if (left > right) {
return count;
} else {
if (copmarison > 0) {
middle = middle + 1;
} else {
middle = middle - 1;
}
}
}
}
public static void main(String[] args) {
String a[]={"A","B","C","D"};
int index = BinarySearchForStudentsName(a,"M");
if (index == count) {
System.out.println("not found");
} else {
System.out.println("founded at " + index);
}
}}
答案 0 :(得分:0)
您需要更新left
和right
值,而不是middle
..更改此内容
while (true) {
middle = (left + right) / 2;
int copmarison = Name.compareTo(StudentName[middle]);
if (Name.equals(StudentName[middle])) {
return middle;
} else if (left > right) {
return count;
} else {
if (copmarison > 0) {
left = middle + 1;
} else {
right = middle - 1;
}
}
}
答案 1 :(得分:0)
寻找名字,你拿一本电话簿。在正中间打开它。有三种可能性:
1)你很幸运,你找到了名字,搜索结束。
2)名称为“更大”(按字母顺序排列)。撕掉电话簿的左半部分并重新启动。
3)您要搜索的名称是“较小”。扯掉电话簿的右半部分,重新开始......
代码出了什么问题?
1)BinarySearch需要一个排序数组:
String a[]={"Aureliano","Cruise","Hatchi","Zaboumba"};
2)'compareTo'的返回值应指导搜索,而不是比较为“left> right”。 “CompareTo”返回0,或返回一些< 0,或返回一些> 0
3)如果搜索到的名称不存在,则在某些时候电话簿中不会留下任何页面。同样,你的代码不应该使用无限循环:而不是'while(true)',考虑一个涉及变量'left'和'right'的条件。