黑马程序员技术交流社区
标题:
查找99不出现结果。
[打印本页]
作者:
曹亚辉
时间:
2016-9-10 21:56
标题:
查找99不出现结果。
package com.hui_binary;
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
//错误的代码,如果两个数例如查找99,最后两个的标志是12/13.两个的差一直是12,一只给mid赋值12,
//一只都是角标为12的比较,不会有变化。所以会出错,也就是当两个star和end的平均数不是整数的时候
//而且两个数还挨着,那么就会一直进行比较赋值。
int[] arr = {3, 4, 9, 15, 23, 25, 36, 45, 45, 59, 59, 78, 78, 99};
System.out.println("请输入你要查询的数字");
int key = new Scanner(System.in).nextInt();
int star = 0;
int end = arr.length - 1;
int mid = (star + end) / 2;
while (!(arr[mid] == key)) {
if (arr[mid] > key) {
end = mid;
mid = (star + end) / 2;
} else if (arr[mid] < key) {
star = mid;
mid = (star + end) / 2;
}
}
System.out.println("查找的数字的位置是:" + mid);
}
}
作者:
Jarc
时间:
2016-9-11 09:42
当你到78和99时,你发现没有你的mid=(12+13)/2一直都是等于12的,也就是你一直在循环这个比较,应该是从mid的后一个开始,然后就可以了,你试一下
作者:
小东先森
时间:
2016-9-11 18:15
这句代码改成:
if (arr[mid] > key) {
end = mid;
mid = (star + end) / 2;
改后:
if (arr[mid] > key) {
end = mid-1;
mid = (star + end) / 2;
这句改成:
else if (arr[mid] < key) {
star = mid;
mid = (star + end) / 2;
改成:
else if (arr[mid] < key) {
star = mid+1;
mid = (star + end) / 2;
最后加一个判断
if(max < min) {
System.out.println("输入的数字不存在");
return;
}
这样就避免了你的索引在整除时陷入死循环的困惑了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2