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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范龙波 高级黑马   /  2013-5-9 21:09  /  1501 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范龙波 于 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,帮忙找下问题出在哪里,谢谢。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
其中你的那个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-9 21:41
其中你的那个mid的返回值放错位置了:你这样再试一试,if语句执行完就会执行return了,因此,你那么写只能 ...

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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马