黑马程序员技术交流社区

标题: 第一次发,希望可以过!! [打印本页]

作者: 茄子    时间: 2014-5-16 10:55
标题: 第一次发,希望可以过!!
本帖最后由 茄子 于 2014-5-16 23:02 编辑

以下是老师基础教学视屏中的一段有关折半查找的排序,理论上应该返回-1,但是,真是运行结果确实抛出异常……这是为什么呢??以下是代码,运行平台是eclipse


public class halfRearch {

        public static void main(String[] args) {
                int[] arr={1,5,8,8,9,10,25,56};
                int index=getIndex(arr,320);
                System.out.println("index="+index);

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

}


运行结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
        at 黑马练习.halfRearch.getIndex(halfRearch.java:19)
        at 黑马练习.halfRearch.main(halfRearch.java:11)

作者: 来男.    时间: 2014-5-16 10:59
本帖最后由 来男. 于 2014-5-16 11:01 编辑

同学,你数组下标越界了(才报ArrayIndexOutOfboundsException),改成arr.length-1就行了(如1)
这是数组操作的常见错误。

public class halfRearch {

        public static void main(String[] args) {
                int[] arr={1,5,8,8,9,10,25,56};
                int index=getIndex(arr,320);
                System.out.println("index="+index);

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

}





作者: 张盼    时间: 2014-5-16 11:24
数组下标越界了,max=arr.length-1:
作者: stream    时间: 2014-5-16 11:30
都加上try吧
作者: 流沙    时间: 2014-5-16 11:31
沙发说的对
作者: 我为你着迷    时间: 2014-5-16 16:54
我只看到了提示是数组角标越界异常了。
作者: 茄子    时间: 2014-5-16 18:33
问题解决了,谢谢大家!!!
作者: 茄子    时间: 2014-5-16 18:34
来男. 发表于 2014-5-16 10:59
同学,你数组下标越界了(才报ArrayIndexOutOfboundsException),改成arr.length-1就行了(如1)
这是数组操作 ...

来男,问题解决了!!!谢谢,还有一个问题想要请教一下,怎么把这个帖子改为提问结束呢!!!
作者: 李小然    时间: 2014-5-16 19:33
茄子 发表于 2014-5-16 18:34
来男,问题解决了!!!谢谢,还有一个问题想要请教一下,怎么把这个帖子改为提问结束呢!!! ...

点击你发表的帖子下面的"编辑",仔细找一下就能看到,重新编辑一下你的帖子,将分类从""论坛提问"改成"提问结束""即可:)
作者: 茄子    时间: 2014-5-16 23:02
李小然 发表于 2014-5-16 19:33
点击你发表的帖子下面的"编辑",仔细找一下就能看到,重新编辑一下你的帖子,将分类从""论坛提问"改成"提 ...

搞定,现在还在博客使用学习阶段啊11




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