1. 上下限目的是保证能遍历数组的全部元素,因此上下限的初始值取的是数组的下标而非数组的length
2. while循环的条件是 upper 不小于 lower
3. 当前下标命名一开始自己起的是posi,根据其赋值 (lower+upper)/2 ,命名mid还是挺恰当
// 0 1 2 3 4 5 6 7 8 9 10 int[] arr = {1,2,4,5,7,10,12,15,16,18,31}; System.out.println(binFind(arr, 5)); } static int binFind(int[] arr, int target) throws InterruptedException{ int lower = 0; int upper = arr.length - 1; while(upper >= lower){ int mid = (lower + upper)/2; if(arr[mid] > target){ upper = mid - 1; }else if(arr[mid] < target){ lower = mid + 1; }else{ return mid; } } return -1; } }