java数组的二分查找法
//这个find()是我程序中的一个方法,作用是查找一个数
public int find(long querykey){
int lowerbound=0;//定义下限
int upperbound=nelems-1;//定义上限,这个nelems变量是我程序中的一个变量,是数组的长度
int curin;
while(true){  
curin=(lowerbound+upperbound)/2;
if(a[curin]==querykey)//查找这个querykey的值
return curin;
else if(lowerbound>upperbound)
return nelems;
else{
if(a[curin]<querykey)
lowerbound=curin+1;
else
upperbound=curin-1;
}
}
问题1:while(true)循环中何时会结束?我在下面看不见有false的出现!
问题2:else if(lowerbound>upperbound) 这句中,下限大于上限,这用事情会发生吗?在什么时候会有这种可能?这句结束后,返回nelems有什么意义???
我想了大半天都不明白,因为java是自学的,没人可以问,只能在这里发贴提问!谢谢大家!

解决方案 »

  1.   

    我的站也不错哟,有很多值得你看的哟,
    来踩一下呀, 
    http://bbs.oneedu.cn/bbs
      

  2.   

    回答1:这个循环是直到你return了才会结束。
    回答2:当然会出现,你取lowerbound=0,upperbound=1,此时curin=0,当进入
    if(a[curin]<querykey)
    lowerbound=curin+1;
    else
    upperbound=curin-1;
    时,执行else语句,就会发生了,至于返回nelems,我理解没有什么意思吧
      

  3.   

    还是有点不明白:为什么直到return就结束??while(true)不是要直到条件为false才结束吗??
      

  4.   

    return是直接跳出方法了,所以循环也就结束了
      

  5.   

    返回nelems只是表示没有找到,不过一般习惯性的会用-1来表示而已