黑马程序员技术交流社区

标题: 练习 binarysearch时出现了问题 [打印本页]

作者: 范龙波    时间: 2013-5-9 21:09
标题: 练习 binarysearch时出现了问题
本帖最后由 范龙波 于 2013-5-10 06:08 编辑

import java.util.*;

class binarysearchDemo
{
        public static void main(String[] args)
        {
                halfSearchDemo();
        }
        public static int halfSearch(List<String> list,String key)
        {
                int max,min,mid;
                max=list.size()-1;
                min=0;
                while(min<=max)
                {
                        mid=(max+min)>>1;
                        String str=list.get(mid);
                        int x=str.compareTo(key);
                        if(x>0)
                                max=mid-1;
                        else if(x<0)
                                min=mid+1;                        
                        return mid;
                }
                return -min-1;
        }
        public static void halfSearchDemo()
        {
                List<String> list=new ArrayList<String>();
                list.add("a");
                list.add("bdx");
                list.add("assf");
                list.add("bsa");
                list.add("ubds");
                sop(list);
                Collections.sort(list);
                sop(list);
                int in=halfSearch(list,"a");
                sop(in); //每次打印这个in的时候怎么都是2啊
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
//编译没问题可是结果就是始终不变的2,帮忙找下问题出在哪里,谢谢。


作者: 黄玉昆    时间: 2013-5-9 21:41
其中你的那个mid的返回值放错位置了:

  1.                        
  2.                         if(x>0)
  3.                                 max=mid-1;
  4.                         else if(x<0)
  5.                                 min=mid+1;
  6.                         else
  7.                                 return mid;
复制代码
你这样再试一试,if语句执行完就会执行return了,因此,你那么写只能执行一次while循环,因为return是方法的结束标志。
作者: 范龙波    时间: 2013-5-10 06:07
黄玉昆 发表于 2013-5-9 21:41
其中你的那个mid的返回值放错位置了:你这样再试一试,if语句执行完就会执行return了,因此,你那么写只能 ...

谢谢明白了,这样改过来结果正确了, 我以为if(x<0)如果条件满足就不执行下面那个语句呢,理解错误啊。






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