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是自学的,没人可以问,只能在这里发贴提问!谢谢大家!
//这个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是自学的,没人可以问,只能在这里发贴提问!谢谢大家!
解决方案 »
- 关于使用MyEclipse的注意事项请教
- java研究中遇到的问题
- int a=3. 能不能使用 a.toString()这个函数
- 关于一个KeyEvent的小程序的问题
- 谁能帮我详细的解释下setXORMode该函数的用法啊?
- 使用AWT,创建一个TextField类的对象,如何实现文本的对齐方式?
- JTextPane的问题求救
- 问两个一般用不到但很有趣的swing问题?
- 我怎样能使得ResultSet结果集可以更改,游标可以移动?80分
- 请问如何保护我的.class文件被反编译成.java?
- 以父类的变量访问子类的成员在程序上有什么好处?
- 关于用wrapper将一个jar包转换成NT服务的问题
来踩一下呀,
http://bbs.oneedu.cn/bbs
回答2:当然会出现,你取lowerbound=0,upperbound=1,此时curin=0,当进入
if(a[curin]<querykey)
lowerbound=curin+1;
else
upperbound=curin-1;
时,执行else语句,就会发生了,至于返回nelems,我理解没有什么意思吧