尝试使用Java打印数组时出现异常

时间:2014-11-03 21:26:02

标签: java arrays loops for-loop

我在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循环在这里可以工作,但事实并非如此。为什么?

4 个答案:

答案 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是整数元素而不是索引。