标题: 练习代码时出现点意外状况,高手解析下 [打印本页] 作者: 成都校区 时间: 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;
当执行输出语句: ...