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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马官聘 中级黑马   /  2015-11-13 23:27  /  1153 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  lianxi
{
public static int half(int[] arr,int key)
{
  int min = 0,max=arr.length-1,mid;
   while (min<=max)
   {
   mid=(max+min)/2;
   if(key>arr[mid])
    min=mid+1;
   else if(key<arr[mid])
    max=mid-1;
   else
    return mid;
   }
   return -1;
}
public static void main(String[] args)
{
  int[] arr={2,3,5,8,10,20};
  int index =half(arr,22);
  System.out.println("index="+index);
}
上面那个while判断min不是会一直小于等于max么  为什么要找的数不在数组中会输出-1?

12 个回复

倒序浏览
这是个需要有返回值,有形参的方法。方法执行结束后必须有return值。
回复 使用道具 举报
while语句成立并执行则返回 mid  否则返回-1
回复 使用道具 举报
帮你顶下贴
回复 使用道具 举报
return语句在while循环之外吧
回复 使用道具 举报
无语  谁说一直是 小于等于 max的;  这种逻辑题  自己拿笔一步步验算就会一目了然的。注意折半查找 跳出循环的条件
回复 使用道具 举报
顶下贴
回复 使用道具 举报
wx_YXxWrUwd 来自手机 中级黑马 2015-11-20 00:52:44
8#
当所有数挨个比对之后 找了遍 找不到一样的 min就会大于max
回复 使用道具 举报
小鹿 中级黑马 2015-11-20 09:09:30
9#
请问你的注释呢!!   这习惯可不好!
回复 使用道具 举报
找不到就会执行while循环外的return -1;
回复 使用道具 举报
哥们,都中级黑马啦
回复 使用道具 举报
因为min有一种情况是中间数加1 ,当max和min指向同一个数时,再加1就比max大了,输出返回-1是一个规范
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马