黑马程序员技术交流社区

标题: 错误没找出来,求大神指教 [打印本页]

作者: 儿时往事    时间: 2016-2-27 14:24
标题: 错误没找出来,求大神指教
public class Demo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
        int arr[]={1,12,13,45,56,84,98};
        int index=getchaban(arr, 84);
        System.out.println(index);
        }
        /*
        折半查找法:一个有序的数组,查找某一个数,利用角标确定性来查找
        三个记录角标的值分别是max最大  最小min   mid中间
        arr[]  对数组中的数进行循环判断,若判断的数大于mid   则min等于mid+1
        相反则max-1  再次进行折半  若max《min  输出-1               
                   定义一个函数,求取折半查找值
                有返回值。类型是int
                未知参数是一个数组,一个查找的数
           */
            public static int getchaban(int[] arr,int key)
                {
                  int max=arr.length;
                  int min=0;
                   int mid=(max+min)/2;
                  while(arr[mid]!=key)
                            {
                           if(arr[mid]<key)
                              min=mid+1;
                           else if(arr[mid]>key)
                                max=mid-1;

                                if(max<min)
                                return -1;
                        }
                                return mid;
                }


        }

作者: pangzi_zhou    时间: 2016-2-28 11:22
你的mid值在循环里面永远没有变化,所以循环条件一直成立,死循环
应该将mid = (max + min)/2  放到循环里面




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2