1. 思路:
①设置左右边界和target索引,左边界为0,右边界为数组长度-1,索引初始值为-1。
②因为不知道一共要找几次所以用while,当左边比右边大的时候循环结束
③设置一个中间位置middle,让nums[middle]去和target进行比较,如果目标值小于中间值那么目标值就在中间值的左边,那么移动最右边的值,让最右边的值等于middle - 1,反之挪动最左边的值,让最左边的值等于middle + 1,如果目标值等于中间值那么证明找到了,并跳出循环,此时中间值就是要找的数的索引
④返回index值,如果找到返回的数字应该是对应索引,如果没找到返回的数字应该为-1
2. 最终代码:
import java.util.Scanner;
public class zheBan {
//返回值是int型
public static int zheBan(int[] nums, int target) {
//设置一个最左边的数
int left = 0;
//设置一个最右边的数
//减一因为数组最大下标等于length-1
int right = nums.length - 1;
//设置找到target的索引,如果没找到为-1
int index = -1;
//因为不知道一共要找多少次所以用while循环
//当最左边的数比最右边的数大时循环结束
while (left <= right){
//设置一个中间位置middle,让nums[middle]去和target进行比较
int middle = (left + right) / 2;
//如果目标值小于中间值那么目标值就在中间值的左边
if (target < nums[middle]){
//此时移动最右边的值,让最右边的值等于middle - 1
right = middle - 1;
}
//如果目标值大于中间值那么目标值就在中间值的右边
else if (target > nums[middle]){
//此时挪动最左边的值,让最左边的值等于middle + 1
left = middle + 1;
}
//如果目标值等于中间值那么证明找到了,并跳出循环
else {
//此时中间值就是要找的数的索引
index = middle;
break;
}
}
//返回index值,如果找到返回的数字应该是对应索引,如果没找到返回的数字应该为-1
return index;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//定义一个数组
int[] nums = new int[6];
//随机输入一个数组
System.out.println("请输入nums:");
for (int i = 0; i < nums.length; i++) {
nums[i] = sc.nextInt();
}
//输入target
System.out.println("请输入target");
int target = sc.nextInt();
//将nums和target传入,并创建index来接收
int index = zheBan(nums,target);
//输出最后结果,如果index不等于-1输出index, 如果index等于-1输出没找到
if (index != -1){
System.out.println(target + "应出现在第" + (index + 1)+ "的位置上");
}
else{
System.out.println(target + "没有找到!");
}
}
}