首先,寫出一個給數組排序的程序:
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 閱讀(252)
評論(1) 編輯 收藏