我在Java中有这个非常小的程序(刚开始学习这门语言):
package hellojava;
public class Hellojava {
public static void main(String[] args) {
System.out.println("Hello World");
int[] nums = {1,2,3,4,5,6,7,8,9,10};
int[] revs = reverse(nums);
for (int i : revs) {
System.out.println(revs[i]);
}
}
public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i=0, j=result.length-1; i<list.length; i++, j--) {
result[j] = list[i];
}
return result;
}
}
它抛出了这个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at hellojava.Hellojava.main(Hellojava.java:9).
所以我非常清楚错误并且知道如何修复它,但我的问题是关于for循环。我认为这个增强的for循环在这里可以工作,但事实并非如此。为什么?
答案 0 :(得分:10)
问题是增强的for循环给出了数组的值,而不是索引。因此,10
返回值,这是一个无效的索引。
你的循环开始:
for (int i : revs) {
相当于
for (int index = 0; index < revs.length; index++)
{
int i = revs[index];
}
答案 1 :(得分:5)
增强的for循环为您提供数组中的值,而不是索引。尝试
for (int i : revs) {
System.out.println(i);
}
答案 2 :(得分:3)
简单:
for (int i : revs) {
System.out.println(i);
}
您正在使用foreach
语句而不是for
索引循环。 foreach
循环为您迭代数组并将数组的元素指定给i
,因此不要将其视为数组的索引。
以下是For-Each Loop上的Oracle文档。
答案 3 :(得分:3)
替换
System.out.println(revs[i]);
与
System.out.println(i);
说明:变量i
是整数元素而不是索引。