/**
* 用二分法查找,如果找到打印其值
* @param target 要查找的数值
* @param array 要查找数值所在的数组
*/
public static void search(int target,int []array){
int startIndex=0;
int stopIndex=array.length-1;
int middle=(startIndex+stopIndex)/2;
int value=array[middle];
while((startIndex<stopIndex)&array[middle]!=target){
if(value<target){
startIndex=middle+1;
}else{
stopIndex=middle-1;
}
middle=(startIndex+stopIndex)/2;
if(array[middle]==target){
System.out.println(array[middle]);
}
}
}
public static void main(String args[]){
int array[]=new int[]{
1,2,3,4,5
};
int target=2;
search(target,array);
}
这是我最开始写出来的程序,试着测试,马上发现了问题,如果数组内容只有一个元素,那么while循环根本不会进行,假设传入array只有一个元素,其值为2,target=2,尽管数组中有2这个数值,但是由于没有进入循环,所以没有打印。为此我把程序稍稍修改,将将判断语句移到循环外面,这样,在数组只有一个数值时,程序可以给出我们想要的结果。
System.out.println(array[middle]);
}else{
System.out.println("没有找到");
}
}