2 luke003 luke003 于 2016.01.27 17:12 提问

java小白求大神帮看一下为什么会发生数组越界。代码如下:

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");
    }

}

}

9个回答

caozhy
caozhy   Ds   Rxr 2016.01.27 17:44
 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++)
a1104258464
a1104258464   2016.01.27 17:25

数组的下标是从0开始取得 arr[0]=100

prokechery
prokechery   2016.01.27 17:36

当i等于零时,j<arr.length-i-1 即j的最大取值是 arr.length-1。然后 j +1 的下标去访问 arr 就越界了。

enpterexpress
enpterexpress   2016.01.27 18:30

当i等于arr.length-1时,j有一种小于0的情况,这是不行的

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2016.01.27 20:20

j的最大取值是 arr.length-1

Chely_Yi
Chely_Yi   2016.01.27 23:47

i = 0的时候 j可以取到 length-1 但是你下面还要算arr[j+1] 数组最大下标是length-1 所以会越界啦

xionglangs
xionglangs   Rxr 2016.01.28 10:55

当i=0时,for(j=0;j<8-0;j++){}当j=7时,可以进入里面的循环,if(arr[7]<arr[8]){}这里arr[8]数组越界了。

Royal_lr
Royal_lr   Ds   Rxr 2016.01.28 11:24

当i=0时,,arr.length-0=8,,,当j=7时,,j+1=8,,arr[8]有没越界,,大声告诉我

91program
91program   Ds   Rxr 2016.01.27 17:20
当i等于零时,j<arr.length-i-1 即j的最大取值是 arr.length-1。然后 j +1 的下标去访问 arr 就越界了。
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!