gpt4 book ai didi

java - Binary Search 仅当搜索项为偶数时才创建无限循环

转载 作者:行者123 更新时间:2023-11-29 07:37:16 27 4
gpt4 key购买 nike

对于我的类(class),我需要制作一个同时使用二分搜索和线性搜索的程序。线性搜索工作正常,所以我知道问题不在于所需的搜索词不存在。

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

我正在从文件中读取图书列表,并将其放入存储书名和 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 语句放在当前中断的位置。

最佳答案

二分查找的问题在于它坚持要找到一个匹配项;否则,它根本不会退出。

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

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

关于java - Binary Search 仅当搜索项为偶数时才创建无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com