A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 公子-醉香 中级黑马   /  2013-11-16 16:18  /  1613 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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.         }
复制代码
谢谢各位了!

评分

参与人数 1技术分 +1 收起 理由
FFF + 1

查看全部评分

5 个回复

倒序浏览
遇到的问题是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
        at day01.ArrayTest.halfSearch_2(ArrayTest.java:19)
        at day01.ArrayTest.main(ArrayTest.java:9)
回复 使用道具 举报
  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: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)就没问题了

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
明显的数组角标越界了,不是大问题,自己仔细研究下
回复 使用道具 举报
你再看看

QQ截图20140626104619.png (62.27 KB, 下载次数: 36)

QQ截图20140626104619.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马