黑马程序员技术交流社区
标题:
练习 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的返回值放错位置了:
if(x>0)
max=mid-1;
else if(x<0)
min=mid+1;
else
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