package arraytest;
public class ArrayTestSort {
public static void main(String[] args) {
int i,j=0;
int[] arr = new int[]{100,40,60,87,34,11,56,0};
int temp = 0;
for(i = 0;i<arr.length;i++){
for(j = 0;j<arr.length-i-1;j++){//这里的j<arr.length-i-1 变成j<arr.length-i。时为什么会发生数组越界?
if(arr[j]<arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.print(arr[i]+"\t");
}
}
}
j的最大取值是 arr.length-1
当i等于零时,j<arr.length-i-1 即j的最大取值是 arr.length-1。然后 j +1 的下标去访问 arr 就越界了。
数组的下标是从0开始取得 arr[0]=100
当i等于零时,j<arr.length-i-1 即j的最大取值是 arr.length-1。然后 j +1 的下标去访问 arr 就越界了。
for(i = 0;i<arr.length;i++){
for(j = 0;j<arr.length-i-1;j++)
->
for(i = 0;i<arr.length - 1;i++){
for(j = 0;j<i;j++)
当i等于arr.length-1时,j有一种小于0的情况,这是不行的
i = 0的时候 j可以取到 length-1 但是你下面还要算arr[j+1] 数组最大下标是length-1 所以会越界啦
当i=0时,for(j=0;j<8-0;j++){}当j=7时,可以进入里面的循环,if(arr[7]<arr[8]){}这里arr[8]数组越界了。
当i=0时,,arr.length-0=8,,,当j=7时,,j+1=8,,arr[8]有没越界,,大声告诉我