{
public static void main(String[] args) {
// 二分查询原理: 首先定义一个中间值的索引 再定义一个数组最左边值的索引 再定义最右边值的索引
// 从中间开始查如果比中间值大 那么就把中间值+1的索引赋值给最左边的值的索引
// 从中间开始查如果比中间值小 那么就把中间值-1的索引赋值给最右边的值的索引
// 演示过程: {1,2,3,4,5,6,7,8,9} 假设查找的值为 3 最左边值的索引为:0 值为:1 最右边值的索引为: 8 值为:9
// 第一次查找 {1,2,3,4,5,} 因为比中间值小 那么就是 索引 4 - 1 下一轮就是 0-->4进行查找 以此类推 就能查找到
// 定义一个数组
int [] arr = {1,2,3,4,5,6,7,8,9};
// 索引
int index = -1;
int value;
// 最左边值的索引
int left = 0;
// 最右边值的索引
int right = arr.length-1;
// 中间值的索引
int middle = (left + right) / 2;
// 循环查询 直到 最左边的值 大于 right 才打破循环
Scanner input = new Scanner(System.in);
System.out.println("输入需要查找的值:");
value = input.nextInt();
while (left <= right){
// 判断中间值是for等与需要查找的值
if (arr[middle] == value){
// 如果是直接把 中间值的索引 赋值
index = middle;
// 查到到了直接跳出循环
break;
// 如果中间值小与 需要查找的值
}else if (arr[middle] < value){
// 那么就就把中间值赋值的索引+1 给最左边值的索引
left = middle + 1;
// 反之 把最中间的值的索引-1 赋值给最右边值的索引
}else {
right = middle - 1;
}
// 每一次循环中间值都在变 需要把中间值的公式 每次都循环运行一次 产生不同的中间值
middle = (left + right) / 2;
// 最后一种可能 中间值不存再
}if (index == -1){
System.out.println("查找的值索引不存在");
// 存在则大于值所对的索引的位置
}else {
System.out.println(value+"的索引是:"+index);
}
}
}