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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 茄子 高级黑马   /  2014-5-16 10:55  /  1466 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 茄子 于 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)

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
本帖最后由 来男. 于 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;
               
               
        }

}




评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很给力!

查看全部评分

回复 使用道具 举报
数组下标越界了,max=arr.length-1:
回复 使用道具 举报
都加上try吧
回复 使用道具 举报
沙发说的对
回复 使用道具 举报
我只看到了提示是数组角标越界异常了。
回复 使用道具 举报
茄子 高级黑马 2014-5-16 18:33:00
7#
问题解决了,谢谢大家!!!
回复 使用道具 举报
茄子 高级黑马 2014-5-16 18:34:07
8#
来男. 发表于 2014-5-16 10:59
同学,你数组下标越界了(才报ArrayIndexOutOfboundsException),改成arr.length-1就行了(如1)
这是数组操作 ...

来男,问题解决了!!!谢谢,还有一个问题想要请教一下,怎么把这个帖子改为提问结束呢!!!
回复 使用道具 举报
茄子 发表于 2014-5-16 18:34
来男,问题解决了!!!谢谢,还有一个问题想要请教一下,怎么把这个帖子改为提问结束呢!!! ...

点击你发表的帖子下面的"编辑",仔细找一下就能看到,重新编辑一下你的帖子,将分类从""论坛提问"改成"提问结束""即可:)
回复 使用道具 举报
李小然 发表于 2014-5-16 19:33
点击你发表的帖子下面的"编辑",仔细找一下就能看到,重新编辑一下你的帖子,将分类从""论坛提问"改成"提 ...

搞定,现在还在博客使用学习阶段啊11
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马