黑马程序员技术交流社区

标题: 做折半查找的时候遇到一个小问题 [打印本页]

作者: 王亚飞    时间: 2012-11-29 14:49
标题: 做折半查找的时候遇到一个小问题
  1. public class text
  2. {
  3.         public static void main(String[] agrs)
  4.         {
  5.                 int[]arr = {1,2,3,4,5};
  6.                 int Index = half(arr,2);
  7.                 System.out.println("Index = "+Index);
  8.         }
  9.         public static int half(int[] arr,int key)
  10.         {
  11.                 int min,max,mid;
  12.                 min = 0;
  13.                 max = arr.length-1;
  14.                 mid = (min+max)/2;//这里已经定义了mid
  15.                 while(arr[mid]!=key)
  16.                 {
  17.                         if(key>arr[mid])
  18.                                 min = mid+1;
  19.                         else if(key<arr[mid])
  20.                                 max = mid-1;
  21.                        
  22.                         if(min>max)
  23.                                 return -1;
  24.                         mid = (min+max)/2;//这为什么还要写一次呢
  25.                        
  26.                 }
  27.                 return mid;
  28.         }

  29. }
复制代码
上面的代码是可以运行的,但是while循环之前已经写了mid = (max+min)/2 为什么在循环里还要写一次
作者: 何伟    时间: 2012-11-29 15:08
本帖最后由 何伟 于 2012-11-29 15:18 编辑

因为每循环一次min或者max都会变,所以mid也会变得,直到循环条件不满足。第一次是给mid初始化值,下面在写一次的原因是给mid重新赋值,在重新判断是否进入循环,你发现没有循环条件是mid与key比较,而key是不变,如果不在下面重新给mid重新赋值就是死循环了。
作者: 邱峁    时间: 2012-11-29 15:18
if(min>max)
   return -1;
  mid = (min+max)/2;//这为什么还要写一次
}
你这里的mid = (min+max)/2能执行吗,
哥们你能不能不这么逗啊

作者: 何伟    时间: 2012-11-29 15:24
邱峁 发表于 2012-11-29 15:18
if(min>max)
   return -1;
  mid = (min+max)/2;//这为什么还要写一次

能执行的
这里if语句不包括
【mid = (min+max)/2;//这为什么还要写一次】
这句话,楼主只是把{}省略了,不写{}的if语句只对离它最近的语句有效
作者: 邱峁    时间: 2012-11-29 15:39
刚看到
它有这个条件
if(min>max)
   return -1;
    mid = (min+max)/2;//这为什么还要写一次呢
不会进入死循环的,只是找不到值返回-1
                        


作者: 王亚飞    时间: 2012-11-30 15:53
邱峁 发表于 2012-11-29 15:18
if(min>max)
   return -1;
  mid = (min+max)/2;//这为什么还要写一次

我不逗,自己运行看看能不能




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