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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亚飞 中级黑马   /  2012-11-29 14:49  /  1810 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 17:19

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
本帖最后由 何伟 于 2012-11-29 15:18 编辑

因为每循环一次min或者max都会变,所以mid也会变得,直到循环条件不满足。第一次是给mid初始化值,下面在写一次的原因是给mid重新赋值,在重新判断是否进入循环,你发现没有循环条件是mid与key比较,而key是不变,如果不在下面重新给mid重新赋值就是死循环了。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
if(min>max)
   return -1;
  mid = (min+max)/2;//这为什么还要写一次
}
你这里的mid = (min+max)/2能执行吗,
哥们你能不能不这么逗啊

点评

可以执行 。  发表于 2012-11-29 17:19
回复 使用道具 举报
邱峁 发表于 2012-11-29 15:18
if(min>max)
   return -1;
  mid = (min+max)/2;//这为什么还要写一次

能执行的
这里if语句不包括
【mid = (min+max)/2;//这为什么还要写一次】
这句话,楼主只是把{}省略了,不写{}的if语句只对离它最近的语句有效
回复 使用道具 举报
刚看到
它有这个条件
if(min>max)
   return -1;
    mid = (min+max)/2;//这为什么还要写一次呢
不会进入死循环的,只是找不到值返回-1
                        

回复 使用道具 举报
邱峁 发表于 2012-11-29 15:18
if(min>max)
   return -1;
  mid = (min+max)/2;//这为什么还要写一次

我不逗,自己运行看看能不能
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马