首先,寫出一個(gè)給數(shù)組排序的程序:
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]+" ");
}
}
運(yùn)行這個(gè)程序的時(shí)候會彈出:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at com.dr.ONE.Demo01.main(Demo01.java:8)
所謂下標(biāo)越界,就是程序在執(zhí)行過程中用到的數(shù)組下標(biāo)超出了所給出的數(shù)組本來的下標(biāo)。要排列的數(shù)組為arr={7,8,9,4,5,6,0,3,2,1},總共有10個(gè)數(shù)字,下標(biāo)依次為arr[0]、arr[1]、......、arr[9]。
當(dāng)程序執(zhí)行到for(int j=0;j < arr.length;j++)時(shí),因?yàn)槭茄h(huán),所以只要j小于數(shù)組arr的長度10,就會執(zhí)行下面的if語句。當(dāng)j=9時(shí),程序仍然會執(zhí)行下面的語句,會讓arr[9]和arr[9+1]也就是arr[10]比較大小,但是數(shù)組中總共就10個(gè)元素,下標(biāo)為0~9,這里卻出現(xiàn)了arr[10],下標(biāo)超出了0~9的范圍,所以報(bào)出 下標(biāo)越界 的錯(cuò)誤。
當(dāng)程序執(zhí)行到arr[8]與arr[8+1]比較之后就比較完了所有的元素,j就不能再增大了,也就是說j<9,數(shù)組的長度arr.length為10,所以要把程序改為
for (int j = 0; j < arr.length-1; j ++)
也就是程序應(yīng)該為:
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]+" ");
}
}
再執(zhí)行一遍程序,結(jié)果為:
9 8 7 6 5 4 3 2 1 0