A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class ArrayTest6{
    public static void main(String[] args){
        //int[] arr=new int[]{5,1,6,4,2,8,9};
        int[] arr=new int[]{1,2,3,5,6,8,16};
        //int index=getIndex(arr,6);
        int index=halfSearch(arr,11);
        System.out.println(index);
    }
/*
    折半查找,要求数组是有序的
    */
    public static int halfSearch(int[] arr,int value){
        int min=0,max=arr.length-1,mid=(min+max)/2;
         while(arr[mid]!=value){
            if(value==arr[mid]){
                return mid;
            }
            else if(value<arr[mid]){
                max=mid-1;
           }
            else if(value>arr[mid]){
                min=mid+1;
            }
            if(min>max){
                return -1;
            }
           mid=(min+max)/2;           
       }
    }
}

8 个回复

倒序浏览
折半查找没写清,按标准格式写啊
回复 使用道具 举报
运行,看dos命令行提示的错误,在改正!
回复 使用道具 举报
  1.     public static int halfSearch(int[] arr,int value){
  2.         int min=0,max=arr.length-1,mid=(min+max)/2;
  3.          while(arr[mid]!=value){
  4.             if(value==arr[mid]){
  5.                 return mid;
  6.             }
  7.             else if(value<arr[mid]){
  8.                 max=mid-1;
  9.            }
  10.             else if(value>arr[mid]){
  11.                 min=mid+1;
  12.             }
  13.             if(min>max){
  14.                 return -1;
  15.             }
  16.            mid=(min+max)/2;           
  17.        }
  18.     }
  19. }
复制代码


编译器帮你检查了,该函数必须要返回一个int值。而你可能不会返回一个int。
因为如果你的条件不满while循环咋办,跳出while循环后怎么办?  逻辑要严谨啊。
回复 使用道具 举报
朋友,你看 你这个循环外面没有返回值啊。

循环外面才应该是

return mid;因为你的循环条件是(arr[mid]!=value);
则如果没有循环的话就是==。
即找到了,就应该是   return mid;
回复 使用道具 举报
。。。。。
回复 使用道具 举报
jvm检测到存在可能不返回的路径。在最后加一个返回就o了
回复 使用道具 举报
mmppp 发表于 2015-1-7 21:32
朋友,你看 你这个循环外面没有返回值啊。

循环外面才应该是

恍然大悟啊!谢谢:handshake
回复 使用道具 举报
huduzhi 发表于 2015-1-8 01:45
jvm检测到存在可能不返回的路径。在最后加一个返回就o了

恍然大悟啊!原来是没有返回正确的值啊谢谢:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马