黑马程序员技术交流社区

标题: 求大神帮忙看看哪里出错了 [打印本页]

作者: hailong    时间: 2014-9-14 15:19
标题: 求大神帮忙看看哪里出错了
public class ArrayTest3 {
        // 数组的查找操作
        public static void main(String[] args) {
                int[] arr = { 1, 2, 4, 6, 9, 12, 15 };
                int x= getIndex(arr,4);
                System.out.println("x="+x);
                int y = halfSearch(arr, 2);
                System.out.println("y="+y);
                int z = halfSearch_1(arr,2);
                System.out.println("z="+z);
        }

        public static int getIndex(int[] arr, int key) {
                for (int x = 0; x < arr.length; x++) {
                        if (arr[x] == key)
                                return x;
                }
                return -1;
        }

        // 折半查找
        public static int halfSearch(int[] arr, int key) {
                int min=0,max=arr.length - 1,mid=(min + max) / 2;
                while (arr[mid] != key) {
                        if (key > arr[mid]) {
                                min = mid + 1;
                        } else if (key < arr[mid]) {
                                max = mid - 1;
                        }
                       
                        if (mid > max) {
                                return -1;
                        }
                        mid = (min + max) / 2;

                }
                return mid;
        }
       
        //折半第二种方法
        public static int halfSearch_1(int[] arr, int key) {
                int min = 0, max = arr.length - 1, mid;

                while (min <= max) {
                        mid = (max + min) >> 1;
                        if (key > arr[mid]) {
                                min = mid + 1;
                        } else if (key < arr[mid]) {
                                max = mid - 1;
                        } else {
                                return mid;
                        }

                }
                return -1;
        }
}
看过毕老师关于数组查找操作的视频后按老师的代码写的,通过折半查找数组中的元素2,正常应该是y=1,可为什么运行之后y=-1,麻烦各位大神给看下哪里错了,谢谢


作者: Huberry    时间: 2014-9-14 16:02
  1.   // 折半查找
  2.         public static int halfSearch(int[] arr, int key) {
  3.                 int min=0,max=arr.length - 1,mid=(min + max) / 2;
  4.                 while (arr[mid] != key) {
  5.                         if (key > arr[mid]) {
  6.                                 min = mid + 1;
  7.                         } else if (key < arr[mid]) {
  8.                                 max = mid - 1;
  9.                         }
  10.                         if (mid > max) {
  11. /*错在这,如果key < arr[mid],max = mid - 1直接就满足此处if条件,循环返回-1就结束了,应该把 mid = (min + max) / 2;放在这个if前执行*/
  12.                                 return -1;
  13.                         }
  14.                         mid = (min + max) / 2;

  15.                 }
  16.                 return mid;
  17.         }
复制代码

作者: hailong    时间: 2014-9-14 16:05
本帖最后由 hailong 于 2014-9-14 16:18 编辑
Huberry 发表于 2014-9-14 16:02

噢,谢谢
作者: 行进中的蜗牛    时间: 2014-9-14 16:07
  把 if (mid > max) 该成if(min>max)就对了
作者: hailong    时间: 2014-9-14 16:19
行进中的蜗牛 发表于 2014-9-14 16:07
把 if (mid > max) 该成if(min>max)就对了

谢谢,看的还是不够仔细呀,写错了一个字母
作者: 行进中的蜗牛    时间: 2014-9-14 16:31
嘿嘿,很正常,技术分怎么得啊?
作者: 言钟钟    时间: 2014-9-14 17:04
行进中的蜗牛 发表于 2014-9-14 16:31
嘿嘿,很正常,技术分怎么得啊?

用黑马币换。。。6:1
作者: 行进中的蜗牛    时间: 2014-9-14 17:06
新手上路,一个字,穷




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