黑马程序员技术交流社区

标题: 求教,错在哪里,为什么会报错啊??? [打印本页]

作者: pl8236448    时间: 2015-11-30 22:36
标题: 求教,错在哪里,为什么会报错啊???
public class BinarySearch1 {
        public static void main(String[] args) {
                int[]arr={1,21,31,41,51,61,71,81,91};
                System.out.println(search(arr,331));
        }

        private static int search(int[] arr ,int key) {
                int min=0;
                int max=arr.length;
                while (min<=max) {
                        int mid =(max+min)>>>1;
                        if (arr[mid]>key) {
                                max=mid-1;
                        }else if (arr[mid]<key) {
                                min=mid+1;
                        }else {
                                return mid;
                        }
                }
                return -1-min;
        }
}
作者: 成帅帅    时间: 2015-11-30 23:11
没看懂,现在还没学数组。啊哦   。。。
作者: jiangshicun007    时间: 2015-12-1 10:49
public class test06 {
        public static void main(String[] args) {
                int[] arr = { 1, 21, 31, 41, 51, 61, 71, 81, 91 };
                System.out.println(search(arr, 3));
        }

        private static int search(int[] arr, int key) {
                int min = 0;
                int max = arr.length - 1;// 这里第一处错误,最大值应该是arr.length-1;
                int mid = (max + min)/2;
                while (arr[mid] != arr[key]) {            
                        if (arr[mid] >arr[key]) {
                                max = mid - 1;
                        } else if (arr[mid] <arr[key]) {
                                min = mid + 1;
                        }
                        mid = (max + min)/2;
                        if(min>max){return -1;}
                }
                        return arr[mid];
               

        }
}
作者: jiangshicun007    时间: 2015-12-1 10:52
jiangshicun007 发表于 2015-12-1 10:49
public class test06 {
        public static void main(String[] args) {
                int[] arr = { ...

楼主你循环里的那个elses是什么意思,而且用key和值去比是几个意思?
作者: wyasln    时间: 2015-12-1 11:05
错误提示呢?
作者: 石三伢子1    时间: 2015-12-1 12:56
int max=arr.length;应该是 int max=arr.length-1;要不然角标越界;
作者: 石三伢子1    时间: 2015-12-1 12:58
另外,int mid =(max+min)>>>1;应该是int mid =(max+min)>>1;多移了一位;




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