黑马程序员技术交流社区

标题: 请教一个二分查找问题 [打印本页]

作者: javaking    时间: 2015-6-28 16:19
标题: 请教一个二分查找问题
本帖最后由 javaking 于 2015-6-28 16:21 编辑

刚才看java视频发现一个二分查找的问题 请各位大大指教一下

  1. class  Erfen
  2. {
  3. public static void main(String[] args)
  4. {
  5.   int[]arr={23,34,45,56,78,89,101};
  6.   //             0   1  2    3   4   5    6
  7.   int num=sel(arr,891);
  8.   System.out.println("要查找的数值角标为"+num);
  9. }
  10. public static int sel(int[]arr,int key)
  11. {
  12.   int min,mid,max;
  13.   min=0;
  14.   mid=(0+arr.length-1)/2;
  15.   max=arr.length;
  16. while(key!=arr[mid])
  17.   {
  18.    if(key>arr[mid])
  19.    {
  20.     min=mid+1;
  21.    }
  22.    else if(key<arr[mid])
  23.    {
  24.     max=mid-1;
  25.    }
  26.    
  27.    if(min>max)
  28. /*视频此处为min>max;但是我查找一个数比数组最大值还大的时候,编译器报

  29. 错,提示ArrayIndexOutOfBoundsException
  30. 修改为 min>mid 就报-1了   
  31. */
  32.    {
  33.     return -1;
  34.    }
  35.    mid=(min+max)/2;
  36.   }
  37.   return mid;
  38. }
  39. }
复制代码
if(min>max) /*视频此处为min>max;但是我查找一个数比数组里最大值还大的时候,编译器报
错,提示ArrayIndexOutOfBoundsException
修改为 min>mid 就报-1了   
*/
请问这一块是不是视频里错了~~
   

作者: kirsting    时间: 2015-6-28 16:35
max=arr.length-1;
注意这个,改了以后我试了一下正常了
作者: javaking    时间: 2015-6-28 16:46
kirsting 发表于 2015-6-28 16:35
max=arr.length-1;
注意这个,改了以后我试了一下正常了

赞。。是我疏忽了
作者: kirsting    时间: 2015-6-28 16:48
而且既然mid=(min+max)/2;
就不要这样写了
min=0;
mid=(0+arr.length-1)/2; (这里的max初值是正确的,说明你粗心了)
max=arr.length;
写成
min=0;
max=arr.length-1;
mid=(min+max)/2;

作者: kirsting    时间: 2015-6-28 16:50
javaking 发表于 2015-6-28 16:46
赞。。是我疏忽了

哈哈哈,共勉共勉,我也刚学到这附近
作者: zhao_HHH    时间: 2015-6-28 17:15
不错,经验都是从错误中得来的
作者: javaking    时间: 2015-6-28 17:41
kirsting 发表于 2015-6-28 16:48
而且既然mid=(min+max)/2;
就不要这样写了
min=0;

的确,好多细节需要注意




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