我得到了下面提到的程序的输出。此外,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]);
}
}
}
答案 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
的数组,则其索引将从0
到N - 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;
}
现在您的阵列已颠倒过来。