首先,写出一个给数组排序的程序:
public class Demo01 {
public static void main(String[] args) {
int[] arr={7,8,9,4,5,6,0,3,2,1};
for (int i=0;i<arr.length;i++){
for(int j=0;j < arr.length;j++){
if(arr[j]<arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
}
运行这个程序的时候会弹出:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at com.dr.ONE.Demo01.main(Demo01.java:8)
所谓下标越界,就是程序在执行过程中用到的数组下标超出了所给出的数组本来的下标。要排列的数组为arr={7,8,9,4,5,6,0,3,2,1},总共有10个数字,下标依次为arr[0]、arr[1]、......、arr[9]。
当程序执行到for(int j=0;j < arr.length;j++)时,因为是循环,所以只要j小于数组arr的长度10,就会执行下面的if语句。当j=9时,程序仍然会执行下面的语句,会让arr[9]和arr[9+1]也就是arr[10]比较大小,但是数组中总共就10个元素,下标为0~9,这里却出现了arr[10],下标超出了0~9的范围,所以报出 下标越界 的错误。
当程序执行到arr[8]与arr[8+1]比较之后就比较完了所有的元素,j就不能再增大了,也就是说j<9,数组的长度arr.length为10,所以要把程序改为
for (int j = 0; j < arr.length-1; j ++)
也就是程序应该为:
public class Demo01 {
public static void main(String[] args) {
int[] arr={7,8,9,4,5,6,0,3,2,1};
for (int i=0;i<arr.length;i++){
for(int j=0;j < arr.length-1;j++){
if(arr[j]<arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
}
再执行一遍程序,结果为:
9 8 7 6 5 4 3 2 1 0
posted on 2010-10-09 08:39
Mineralwasser 阅读(227)
评论(1) 编辑 收藏