Java 使用二进制搜索进行搜索
我试图运行这段代码,通过使用二进制搜索来搜索一个名称,但它不起作用。 这个代码或方法有什么问题Java 使用二进制搜索进行搜索,java,binary-search,Java,Binary Search,我试图运行这段代码,通过使用二进制搜索来搜索一个名称,但它不起作用。 这个代码或方法有什么问题 public static int BinarySearchForStudentsName(String StudentName[],String Name) { int left = 0; int right = count - 1; int middle; while (true) { middle = (left + right) / 2;
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);
}
}}
您需要更新
左侧
和右侧
值,而不是中间的
。如下所示进行更改
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;
}
}
}
找一个名字,你拿一个电话簿。在正中间打开它。有3种可能性: 1) 你很幸运,你找到了名字,搜索结束 2) 名称为“更大”(按字母顺序排列)。撕下电话簿的左半部分并重新启动 3) 您正在搜索的名称为“较小”。撕下电话簿的右半部分,重新开始 代码怎么了 1) BinarySearch需要排序数组:
String a[]={"Aureliano","Cruise","Hatchi","Zaboumba"};
2) “compareTo”的返回值应该指导搜索,而不是“left>right”这样的比较。“CompareTo”返回0,或返回小于0的内容,或返回大于0的内容
3) 如果搜索到的姓名不存在,那么在某个时候电话簿中就不会有页面了。同样,您的代码不应该使用无限循环:与其使用“while(true)”,不如考虑一个包含变量“left”和“right”的条件。1。数组中没有名为“Me”的值。2.在搜索之前需要对数组进行排序。很抱歉,我在编写数组时忘记了对数组进行排序,但同样的事情仍然不起作用。。。。关于“我”的价值,我想尝尝它是否会返回“未找到”或“未找到”。。。那么为什么要搜索呢?
String StudentName[]
不可能正确。您的变量copmarison
拼写错误。您的变量count
未定义。修好这个。哦,你说得对。非常感谢