我得到ArrayIndexOutofBoundsException - 反转数组

时间:2013-07-16 06:26:15

标签: java

我得到了下面提到的程序的输出。此外,Ii还遇到例外情况:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
    at ReverseOrder.main(ReverseOrder.java:15)

为什么会这样?

public class ReverseOrder {
    public static void main(String[] args)
    {
        int anArray[]={1,2,3,4,5,6};
        int anotherArray[]=new int[6];
        for(int i=5,j=0;i>=0;i--,j++)
        {
            anotherArray[j]=anArray[i];
        }
        //System.out.println(anotherArray.length);
        //System.out.println(anotherArray[2]);
        for(int j=0;j<=anotherArray.length;j++)
        {
            System.out.println(anotherArray[j]);
        }
    }
}

6 个答案:

答案 0 :(得分:3)

问题在于:

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

您正在访问阵列外的位置。发生这种情况是因为方法length为您提供了数组中元素的数量,并且由于数组的第一个位置是0而不是1,您应该在anotherArray.length - 1而不是anotherArray.length结束循环

有两种可能的解决方案,您可以将循环修改为:

a)for(int j=0;j<=anotherArray.length - 1;j++)

B)for(int j=0;j<anotherArray.length;j++)

后者(b)是优选的,因为它对它的算术运算较少。

答案 1 :(得分:3)

更改

for(int j=0;j<=anotherArray.length;j++)

for(int j=0;j<anotherArray.length;j++)

因为如果它是<=你就会超出界限。

在Java(和大多数语言)中,数组是从零开始的。如果您有一个大小为N的数组,则其索引将从0N - 1(总大小为N)。

答案 2 :(得分:2)

变化

<=anotherArray.length

< anotherArray.length

例如,如果数组是

int arr[] = new int[2];
arr.length; // it will be 2, which is [0] and [1] so you can't go upto <=length,
// that way you will access [2] which is invalid and so the exception

答案 3 :(得分:1)

for(int j=0;j<anotherArray.length;j++) 

而不是

for(int j=0;j<=anotherArray.length;j++) 

因为数组在Java中是从零开始的。

答案 4 :(得分:0)

当您尝试访问超出数组限制的元素时,您将获得ArrayIndexOutOfBoundsException

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

答案 5 :(得分:0)

为什么首先使用这种方式来反转数组。无论如何

for(int j=0;j<=anotherArray.length;j++) should change to 

for(int j=0;j<anotherArray.length;j++)

考虑一下这很容易。

    int anArray[]={1,2,3,4,5,6};
    int temp=0;
    for (int i=0;i<anArray.length/2;i++){
       temp=anArray[i];
       anArray[i]=anArray[anArray.length-(1+i)];
        anArray[anArray.length-(1+i)]=temp;
    }

现在您的阵列已颠倒过来。