java中的ArrayOutOfBoundsException

时间:2016-12-30 07:44:45

标签: java arrays sorting indexoutofboundsexception

我在Java中有以下代码。

public class TestArray
{
    public static void main(String s[])
    {

        int arr[]={23,12,1,4,1,4,23,6};
        int temp=arr[0];

        for(int i=0;i<arr.length;i++)
        {
            for(int j=0;j<arr.length;j++)
            {
                if(arr[i]>arr[j+1])
                {
                    temp=arr[j+1];
                    arr[j+1]=arr[i];
                    arr[i]=temp;   
                }
                if(arr[i]==arr[j+1])
                {
                    arr[j+1]=arr[j+2];
                }
            }
       }

       for(int i=0;i<arr.length;i++)
       {
           System.out.println(arr[i]);
       }
    }
}

但是这段代码正在抛出

  

线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:8   在com.test.java.TestArray.main(TestArray.java:16)

有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

arr[j + 1]arr[j + 2]时,尝试索引jarr.length - 1将会失败。

您应该将索引运行到比目前更低的值吗?此外,您索引j + 2的最终繁荣看起来是不必要的。

作为一种风格点,尽可能保持temp的范围。交换两个数组元素时只需要它。

答案 1 :(得分:0)

看起来您正在尝试按降序对数组进行排序。你可以试试这个:

public class TestArray
{
    public static void main(String s[])
    {

        int arr[]={23,12,1,4,1,4,23,6};
        int n = arr.length;  
        int temp = 0;  
        for(int i=0; i < n; i++){  
             for(int j=1; j < (n-i); j++){  
                 if(arr[j-1] < arr[j]){  
                     //swap elements  
                     temp = arr[j-1];  
                     arr[j-1] = arr[j];  
                     arr[j] = temp;  
                 }        
             }  
        }  
        for(int i=0;i<arr.length;i++)
        {
           System.out.println(arr[i]);
        }
    }
}

您可以理解代码。 如果您想知道如何获得例外,请参考Bathsheba

的回答

答案 2 :(得分:0)

将您的代码修改为

for(int i=0;i<arr.length-1;i++) {
    for(int j=i;j<arr.length-1;j++) {
        if(arr[i]>arr[j+1]) {
            temp=arr[j+1];
            arr[j+1]=arr[i];
            arr[i]=temp;   
        }
        if(arr[i]==arr[j+1]) {
            arr[j+1]=arr[j+2];
        }
    }
}

在循环中,j的值将从0到7.并且您正在尝试访问数组的第j + 1位置。因此,当j的值为7时,您正在访问[8]并且它不在数组大小的范围内。大小为8的数组的索引值为0到7。