黑马程序员技术交流社区

标题: 求问 [打印本页]

作者: 田爽    时间: 2013-4-16 16:29
标题: 求问
本帖最后由 田爽 于 2013-4-16 18:46 编辑

public static int zheban(int[] shuzu,int shu)
        {
                int xiao=0,da=shuzu.length-1,zhong=(xiao+da)/2;
                        while(shu!=shuzu[zhong])
                        {
                                if (shu>shuzu[zhong])
                                        xiao=zhong+1;
                                else if (shu<shuzu[zhong])
                                        da=zhong-1;
                                zhong=(xiao+da)/2;
                                if(xiao>da)
                                        return -1;
                        }
                return zhong;

183.java:47: 错误: 可能尚未初始化变量zhong
                int xiao=0,da=shuzu.length,zhong=(xiao+zhong)/2;
                                                       ^
1 个错误

为什么不能初始化变量zhong。
作者: 田爽    时间: 2013-4-16 16:29
错了  是这段代码public static int zheban2(int[] shuzu,int shu)
        {
                int xiao=0,da=shuzu.length,zhong=(xiao+zhong)/2;
                while (zhong<=da)
                {
                        if(shuzu[shu]>zhong)
                                xiao=zhong+1;
                        else if(shuzu[shu]<zhong)
                                da=zhong-1;
                        else return zhong;
                }
                return -1;
        }
作者: 陈圳    时间: 2013-4-16 16:33
  1. if(shuzu[shu]<zhong)//你是给了一个角标,还是一个数值呢?你的zhong是一个角标,你取了一个数值与角标比较?
  2. 而且你的代码好难看.老师用的min/max/min不是挺好的吗?如果你要这样的话,还不如直接定义中文变量
复制代码

作者: 田爽    时间: 2013-4-16 16:38
陈圳 发表于 2013-4-16 16:33

还是不行。。183.java:47: 错误: 可能尚未初始化变量zhong
                int xiao=0,da=shuzu.length,zhong=(xiao+zhong)/2;
                                                       ^
1 个错误


作者: 陈圳    时间: 2013-4-16 17:01
田爽 发表于 2013-4-16 16:38
还是不行。。183.java:47: 错误: 可能尚未初始化变量zhong
                int xiao=0,da=shuzu.length, ...

int xiao=0,da=shuzu.length,zhong=(xiao+zhong)/2;
你真是有才的人.zhong=(xiao+zhong)/2;
你看着有出错的提示自己找一下,也该找到答案了呀.zhong你刚刚定义,怎么能参与运算呢?
你最应该做不是问别人为什么出错,你应该重新看一遍老师的视频,然后把老师写的代码敲出来,如果有错,一行一行对着改,再自己理解.
你这样是舍近求远.
作者: 田爽    时间: 2013-4-16 18:13
陈圳 发表于 2013-4-16 17:01
int xiao=0,da=shuzu.length,zhong=(xiao+zhong)/2;
你真是有才的人.zhong=(xiao+zhong)/2;
你看着有出 ...

大神。我改完发现一直循环。把zhong=(xiao+da)/2 放进whlie循环里就正确了,能不能解释下这是为什么呢?
作者: 陈圳    时间: 2013-4-16 18:18
帅哥,这样吧,我把我的好的代码给你,思路都差不多.你跟着看下,
  1. public static int binarySeach(int num,int[] arr){
  2.                 int min=0,max=arr.length,mid=(min+max)/2;
  3.                 while(min<max){
  4.                         mid=(min+max)/2;
  5.                         if(num<arr[mid]){
  6.                                 max=mid-1;
  7.                         } else if(num>arr[mid]){
  8.                                 min=mid+1;
  9.                         } else return mid;
  10.                 }
  11.                 return -1;
  12.         }
复制代码

作者: 田磊阳    时间: 2013-4-16 18:27
如果问题已解决,请将主题改为“已解决”
作者: 田爽    时间: 2013-4-16 18:37
陈圳 发表于 2013-4-16 18:18
帅哥,这样吧,我把我的好的代码给你,思路都差不多.你跟着看下,

谢谢大神耐心为我解答

作者: 冯超    时间: 2013-4-16 18:43
二分法查找算法·············
作者: 田爽    时间: 2013-4-16 18:45
冯超 发表于 2013-4-16 18:43
二分法查找算法·············

怎么把帖子改成已解决
作者: 陈圳    时间: 2013-4-16 20:37
田爽 发表于 2013-4-16 18:45
怎么把帖子改成已解决

帖子下面有个编辑,你打开编缉,然后重选主题分类为己解决.
作者: 田富丰    时间: 2013-4-17 02:19
你没有给Zhong这个变量声明什么类型
作者: 田爽    时间: 2013-4-17 13:07
陈圳 发表于 2013-4-16 20:37
帖子下面有个编辑,你打开编缉,然后重选主题分类为己解决.

谢谢 已经改好了  
作者: ≮冰糖≯    时间: 2013-4-17 13:40
http://roll.sohu.com/20120821/n351144587.shtml




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