黑马程序员技术交流社区

标题: 折半查找的另一种方式遇到问题 [打印本页]

作者: 公子-醉香    时间: 2013-11-16 16:18
标题: 折半查找的另一种方式遇到问题
  1. public static int halfSearch_2(int[] arr, int key) {
  2.                 int min = 0, max = arr.length, mid;
  3.                 while (min <= max) {
  4.                         mid = (min + max) >> 1;
  5.                         if (key > arr[mid])
  6.                                 min = mid + 1;
  7.                         else if (key < arr[mid])
  8.                                 max = mid - 1;
  9.                         else
  10.                                 return mid;
  11.                 }
  12.                 return -1;
  13.         }
复制代码
谢谢各位了!


作者: 公子-醉香    时间: 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
  1. public static void main(String[] args) {
  2.                 int[] arr = { 1, 2, 3, 4, 5, 6, 7, 9 };
  3.                 System.out.println("所查元素在数组中的位置是:" + halfSearch_2(arr, 10));
  4.         }
复制代码
上面的代码,当我查找数组中不存在的值时,就提示错误!
作者: 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)

QQ截图20140626104619.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2