public class TestSearch {
public static void main(String[] args) {
int a[] = { 1, 3, 6, 8, 9, 10, 12, 18, 20, 34 };
int i = 12;
//System.out.println(search(a, i));
System.out.println(binarySearch(a, i));
}

public static int search(int[] a, int num) {
for(int i=0; i<a.length; i++) {
if(a[i] == num) return i;
}
return -1;
}

public static int binarySearch(int[]a, int num) {
    if (a.length==0) return -1;
    
    int startPos = 0; 
    int endPos = a.length-1;
    int m = (startPos + endPos) / 2;
    while(startPos <= endPos){
      if(num == a[m]) return m;
      if(num > a[m]) {
       startPos = m + 1;//把这个m改成a[m]
      }
      if(num < a[m]) {
       endPos = m -1;
      }
      m = (startPos + endPos) / 2;
    }
    return -1;
  }}

解决方案 »

  1.   

    不知道 ECLIPSE有没这样的功能 我只知道 可以一次性修改同一个方法的名字
      

  2.   

    startPos表示查找时,查找范围的起始位置,startPos=m+1中的m表示上一次的查找范围的中间位置,当要找的元素值比m位置上的元素值还要大时,查找范围的起始位置要变为m+1,如果改成a[m]+1意义变了,算法就不对了.不能改啊.
      

  3.   

    哦,我一般是一看结果不对,就想可能在什么地方有问题,然后去可能出问题的地方找.我的方法比较笨.
    如果找不到问题,我会在程序中插入一些输出语句,把一些中间变量的值打印出来.m = (startPos + endPos) / 2;之前插入一条System.out.println("s="+startPos+"  m="+m+"  e="+endpos);运行程序,看结果就可以了.如果用Eclipse找错就容易多了,可以设断点,可以debug一条条语句执行,我用Eclipse不多.
     
      

  4.   


    可以啊。1,选中方法名,按 Alt + Shift + R 直接更改这个方法的名字,完成后按回车,Eclipse 会把所有调用该方法的名称全部改掉。2,要 Package Explorer 视图中,点这个 Java 文件的前面的 + 号展开属性和方法列表,找到需要改的方法选中,再按 Alt + Shift + R。