3

我得到了下面提到的程序的输出。另外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]);
        }
    }
}
4

6 回答 6

3

问题在这里:

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

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

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

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

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

后者 (b) 更可取,因为它的算术运算较少。

于 2013-07-16T06:28:30.173 回答
3

改变

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

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

因为如果是这样,<=你就会越界。

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

于 2013-07-16T06:28:36.133 回答
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
于 2013-07-16T06:27:39.400 回答
2
for(int j=0;j<anotherArray.length;j++) 

代替

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

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

于 2013-07-16T06:31:17.253 回答
0

当您尝试访问超出数组限制的元素时,您将收到ArrayIndexOutOfBoundsException 。

for(int j=0;j<anotherArray.length;j++) {
    System.out.println(anotherArray[j]);
}
于 2013-07-16T06:28:28.687 回答
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;
    }

现在你的数组被颠倒了。

于 2013-07-16T06:38:02.400 回答