黑马程序员技术交流社区

标题: 改方法报错,说缺少返回值。 [打印本页]

作者: 可见    时间: 2012-3-7 11:38
标题: 改方法报错,说缺少返回值。

我有返回值啊?问题在哪
作者: 刘基军    时间: 2012-3-7 11:50
图片看不见...
作者: 王亚男    时间: 2012-3-7 12:13
对啊,你缺少返回值,这是折半查找。
你在while(min<=max)这个循环外return -1;
意思就是当min>max时返回-1值。

百度贴吧的相册外链看不到,只要在该图右键属性获得url,浏览器上输入就能查看了
作者: 王亚男    时间: 2012-3-7 12:17
他的代码是这样子的:
  1. public static int halfSearch_2(int arr,int key)
  2. {
  3.     int min=0,max=arr.length-1,mid;
  4. while(min<=max)
  5. {
  6.     mid=(min+max)>>1;
  7.     if(key>arr[mid])
  8.     min=mid+1;
  9.    else if(key<arr[mid])
  10.     max=mid-1;
  11.    else
  12.        return mid;
  13. }
  14. return -1 ; //你少这么一句,因为你声明了返回类型为int的方法。
  15. }
复制代码

作者: 可见    时间: 2012-3-7 13:51
王亚男 发表于 2012-3-7 12:17
他的代码是这样子的:

再请问下 就是如果已经找到 返回return mid;
还要读return -1;这条语句不?为什么?

作者: 王亚男    时间: 2012-3-7 16:41
本帖最后由 王亚男 于 2012-3-7 16:48 编辑
刘珂觐 发表于 2012-3-7 13:51
再请问下 就是如果已经找到 返回return mid;
还要读return -1;这条语句不?为什么?
...


那就不会了啊,因为你有循环条件while(min<=max),所以,只要符合这个条件就会折半查找,直到找到,最后return返回该值的脚标。但如果没有查找到的话,也就是min<=max条件不满足的话,就会跳到循环体外寻找return,结果没有,所以会提示你缺少返回值语句。
作者: 可见    时间: 2012-3-8 23:31
王亚男 发表于 2012-3-7 16:41
那就不会了啊,因为你有循环条件while(min

即使查找到循环结束也要退出循环往下执行啊
作者: 王亚男    时间: 2012-3-8 23:57
刘珂觐 发表于 2012-3-8 23:31
即使查找到循环结束也要退出循环往下执行啊


对啊,因为你的条件不满足啊。
条件满足就直接返回了。




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