【发布时间】:2015-06-02 01:10:03
【问题描述】:
我正在尝试使用 java 编程语言实现二进制搜索。 很明显,应该对数组进行排序以使用二进制搜索,因为它使用分而治之的概念。当元素在数组中和不在数组中时,代码在这两种情况下都可以正常工作。但是,当我输入的数字大于数组中的最大数字时,程序会崩溃并给出 Index Out Of Bound Exception。
public class Binary {
public static void search(int arr[]) {
Scanner in = new Scanner(System.in);
int upper = arr.length;
int lower = 0;
int middle = 0;
int flag = 0;
int key;
/*
* flag = 0 ---> not found yet.
* flag = 1 ---> element is found.
* flag = 2 ---> no such element.
*/
System.out.println("Enter the number that you want to find... ");
key = in.nextInt();
while (flag == 0) {
middle = (int) (lower + upper) / 2;
if (key == arr[middle]) {
flag = 1;
}
if (key < arr[middle]) {
upper = middle - 1;
} else if (key > arr[middle]) {
lower = middle + 1;
}
if (lower > upper) {
flag = 2;
}
}
if (flag == 1) {
System.out.println(arr[middle] + " has been found, its index is: "
+ middle);
} else
System.out.println("Error, no such element.");
}
public static void main(String[] args) {
int arr[] = { 2, 4, 6, 8, 11, 34, 56 };
search(arr);
}
}
【问题讨论】:
标签: java arrays algorithm search binary