代码如下:
public class BinarySearch {
public static void main(String[] args) {
int[] arr ={1,3,4,5,7,8};
int x = 8;
int l = 0;
int r =arr.length-1;
while(l < r) {
//先写第一种情况并做判断,注意(l + r >> 1)这个表达式,这样写是对应于这第一种情况而言的
//第一种情况就是arr[mid] >= x(这是我们预先进行判断得到的),如果不行,直接把这俩种情况都写一遍,再看
//或者对数组进行升序排序,然后再进行判断用哪个性质/情况
//也就是说,我们每次都看一下核心区间--->(r = mid 还是 l = mid )因为可能会存在mid 对应的数可能也是我们要找的呢个数
//r = mid 不需要多加呢个1 ,即就是第一种情况
//补上加 1 ,目的也就是为了防止死循环
int mid = l + r >> 1;
if (arr[mid] >= x) {
r = mid;// 就是根据这个来判断是否加 1
} else {
l = mid + 1;
}
}
//这里为什么先进行判断呢,就是判断是否存在这个数
if (arr[l] != x) {
System.out.println("无解");
} else {
System.out.println(l);
while (l < r) {
int mid = l + r + 1 >> 1;
if (arr[mid] <= x) {
l = mid;
} else {
r = mid - 1;
}
}
System.out.println(l);
}
}
}



