黑马程序员技术交流社区
标题:
折半查找的另一种方式遇到问题
[打印本页]
作者:
公子-醉香
时间:
2013-11-16 16:18
标题:
折半查找的另一种方式遇到问题
public static int halfSearch_2(int[] arr, int key) {
int min = 0, max = arr.length, mid;
while (min <= max) {
mid = (min + max) >> 1;
if (key > arr[mid])
min = mid + 1;
else if (key < arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
复制代码
谢谢各位了!
作者:
公子-醉香
时间:
2013-11-16 16:20
遇到的问题是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at day01.ArrayTest.halfSearch_2(ArrayTest.java:19)
at day01.ArrayTest.main(ArrayTest.java:9)
作者:
公子-醉香
时间:
2013-11-16 16:26
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 9 };
System.out.println("所查元素在数组中的位置是:" + halfSearch_2(arr, 10));
}
复制代码
上面的代码,当我查找数组中不存在的值时,就提示错误!
作者:
qw无语
时间:
2013-11-16 17:21
本帖最后由 qw无语 于 2013-11-16 17:23 编辑
while (min <= max) {
mid = (min + max) >> 1;
if (key > arr[mid])
min = mid + 1;
else if (key < arr[mid])
max = mid - 1;
else
return mid;
}
while (min <= max) //当你输入不是里面的数的时候且大于数组里面的任意元素,最后一次循环min=max=arr.length
下面的arr[mid]就会下标越界
如果你把while (min <= max)改成while (min < max)就没问题了
作者:
冷月
时间:
2013-11-16 17:50
明显的数组角标越界了,不是大问题,自己仔细研究下
作者:
会说话的木头
时间:
2014-6-26 10:47
你再看看
QQ截图20140626104619.png
(62.27 KB, 下载次数: 56)
下载附件
2014-6-26 10:46 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2