【发布时间】:2018-06-17 18:49:13
【问题描述】:
我想实现二进制搜索,但搜索键是外部提供的。这意味着我的硬盘中有一个文件。我想从此文件中读取键值。为此我写了一段代码。但是代码进入了无限循环。
这是我的代码:
public class T5 {
public static void main(String args[])throws Exception{
double arr[]= new double[]{86.0,12.0,55.0,90.0,77.0,22.0,25.0,33.0,45.0,20.0,23.0};
int first=0;
int last=(arr.length)-1;
Scanner x= new Scanner(new File("D:\\Test_1.txt"));
while(x.hasNext()){
double a =x.nextDouble();
while(first<=last){
int mid=(first+last)/2;
if(arr[mid]==a){
System.out.println("Search successful");
}
if(arr[mid]<a){
last=mid+1;
}
else{
last=mid-1;
}
}
}
}
}
我在这里提到的 Text_1.txt 文件是这样的
86.0
25.0
30.0
18.0
90.0
88.0
70.0
87.0
55.0
这里所说的数组 arr[] 就是要与键值进行比较的值。 arr[] 由 86.0 组成,文件有 86.0,所以搜索成功。该文件有 25.0,arr 也有值 25.0。于是再次搜索成功。该文件有一个值 30.0 但 arr[] 没有它。所以搜索不成功。
这是概念,但为什么它会进入无限循环。欢迎任何建议和讨论。
【问题讨论】:
-
first=mid+1,不是最后一个
-
此外,它仅在数组 (
arr) 已排序时才有效。
标签: java arrays file java.util.scanner binary-search