二分查找不依赖bufferedreader,仅需有序数组和查找逻辑;bufferedreader用于高效读取输入(如"1 3 5 7 9 11"),经split、parseint转为升序int[]后方可进行二分查找。

二分查找本身不依赖 BufferedReader,它只关心“已排序的数组”和“查找逻辑”。BufferedReader 的作用是高效读取用户输入或文件数据——比如从控制台读入一串已排序的整数,再对它们做二分查找。关键在于:先用 BufferedReader 获取数据并整理成有序数组,再实现标准二分查找逻辑。
用 BufferedReader 读取并解析一行整数
常见场景是从控制台输入类似 "1 3 5 7 9 11" 的字符串,需拆分、转整型、存入数组:
- 用
BufferedReader配合InputStreamReader(System.in)读取一行 - 调用
split("\s+")按空白符切分,避免多个空格出错 - 遍历字符串数组,用
Integer.parseInt()转为 int,存入int[] - 确保输入数据已升序排列(二分查找前提),可加简单校验,如循环检查
arr[i]
实现标准二分查找(非递归版)
这是最常用、易理解、不易栈溢出的写法,返回目标索引或 -1:
- 定义左右边界
left = 0、right = arr.length - 1 - 循环条件用
left ,避免漏掉单元素情况 - 计算中点用
left + (right - left) / 2,防止大数溢出 - 比较
arr[mid]:等于则返回 mid;小于则left = mid + 1;大于则right = mid - 1
把输入和查找串联起来
完整流程示例(无异常处理简化版):
- 创建
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) - 读入字符串 → 分割 → 转数组 → 验证有序性
- 再读一次输入作为要查找的目标值(同样用
Integer.parseInt(br.readLine())) - 调用二分查找方法,打印结果(如 “Found at index 3” 或 “Not found”)
注意边界与常见坑
初级项目中最容易出错的地方:
-
BufferedReader读完后记得br.close()(或用 try-with-resources) - 输入为空行或非法数字时会抛
NumberFormatException或NullPointerException,建议用 try-catch 包裹解析部分 - 二分查找前未确认数组非空,
arr.length == 0时直接返回 -1,避免下标越界 - 不要把
BufferedReader和二分算法混写——职责分离:一个负责“准备数据”,一个负责“查找逻辑”











