黑马程序员技术交流社区

标题: 练习代码时出现点意外状况,高手解析下 [打印本页]

作者: 成都校区    时间: 2012-3-3 04:47
标题: 练习代码时出现点意外状况,高手解析下
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;       
        }
}
作者: 蒙武辉    时间: 2012-3-3 08:09
other=-1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
        at ArrayTest3.main(ArrayTest3.java:9)
上面是运行的结果,原因是数组角标越界,系统会抛出异常,停止下面程序的运行。等你学到异常类你就明白了
作者: wang耀雨    时间: 2012-3-3 15:13
当语句: int other=halfIndex(efg,12); 执行完以后,由于数组中未找到12,other值为-1;
当执行输出语句:System.out.println(efg[other]);数组角标从0开始自然遍历不到-1,即角标越界;
当程序执行到错误的地方自然就不再往下运行其他代码。
顺便提醒一下楼主,getindex是一段废弃而且错误的代码。
望采纳!
作者: dangfei    时间: 2012-3-3 15:47
程序运行到
System.out.println(efg[other]);时,包下标越界异常,代码中有没对此异常进行处理,以下代码就不执行了。
不是other2在运行的时候就不出结果,是other2就没运行。
作者: dangfei    时间: 2012-3-3 15:48
程序运行到
System.out.println(efg[other]);时,包下标越界异常,代码中有没对此异常进行处理,以下代码就不执行了。
不是other2在运行的时候就不出结果,是other2就没运行。
作者: 小白    时间: 2012-3-3 20:02
到你标记的那个地方出现异常之后,程序就停止了,不在往下运行了!!
作者: 成都校区    时间: 2012-3-4 08:50
wang耀雨 发表于 2012-3-3 15:13
当语句: int other=halfIndex(efg,12); 执行完以后,由于数组中未找到12,other值为-1;
当执行输出语句: ...

么事么事,我就是当练习用,俺是底子薄的当做练习而已,谢谢指导{:2_32:}
作者: 成都校区    时间: 2012-3-4 08:51
{:soso__6235880048239246314_3:}  谢谢各位。我再多校习校习。




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