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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class  ArrayTest3
{
        public static void main(String[] args)
        {
                int [] efg={1,2,3,4,5,6,7,8};
               
                                int other=halfIndex(efg,12); //问题点。。。。。。。。。。:当这里值超出范围的时候,other2在运行的时候就不出结果了,不是很理解原因。
                System.out.println("other="+other);
                System.out.println(efg[other]);
               
                int other2=halfIndex_2(efg,6);
                System.out.println("other2="+other2);
                System.out.println(efg[other2]);
        }
        public static int getIndex(int[] arr,int key )
        {
                for (int x=0;x<arr.length-1 ; x++)
                {
                        if (arr[x]==key)
                                return x;               
                }
                return -1;
        }
        /*
        折半查找法,这种查找法,要求数组中的元素必须是有序的。
        */
        public static int halfIndex(int[] arr,int key )
        {
                int min = 0;
                int max=arr.length-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;
        }
        /*
        折半查找第2种方法法,这种查找法,要求数组中的元素必须是有序的。
        */
        public static int halfIndex_2(int[] arr,int key )
        {
                int min = 0, max=arr.length-1,mid;
                while(min<=max)
                {
                        mid=(min+max)>>1;
                        if (key>arr[mid])
                                min=mid+1;
                        else if(key<arr[mid])
                                max=mid-1;
                        else if(key==arr[mid])
                        return mid;       
                }
                return -1;       
        }
}

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

7 个回复

正序浏览
{:soso__6235880048239246314_3:}  谢谢各位。我再多校习校习。
回复 使用道具 举报
wang耀雨 发表于 2012-3-3 15:13
当语句: int other=halfIndex(efg,12); 执行完以后,由于数组中未找到12,other值为-1;
当执行输出语句: ...

么事么事,我就是当练习用,俺是底子薄的当做练习而已,谢谢指导{:2_32:}
回复 使用道具 举报
到你标记的那个地方出现异常之后,程序就停止了,不在往下运行了!!
回复 使用道具 举报
程序运行到
System.out.println(efg[other]);时,包下标越界异常,代码中有没对此异常进行处理,以下代码就不执行了。
不是other2在运行的时候就不出结果,是other2就没运行。
回复 使用道具 举报
程序运行到
System.out.println(efg[other]);时,包下标越界异常,代码中有没对此异常进行处理,以下代码就不执行了。
不是other2在运行的时候就不出结果,是other2就没运行。
回复 使用道具 举报
当语句: int other=halfIndex(efg,12); 执行完以后,由于数组中未找到12,other值为-1;
当执行输出语句:System.out.println(efg[other]);数组角标从0开始自然遍历不到-1,即角标越界;
当程序执行到错误的地方自然就不再往下运行其他代码。
顺便提醒一下楼主,getindex是一段废弃而且错误的代码。
望采纳!
回复 使用道具 举报
other=-1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
        at ArrayTest3.main(ArrayTest3.java:9)
上面是运行的结果,原因是数组角标越界,系统会抛出异常,停止下面程序的运行。等你学到异常类你就明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马