【问题标题】:exception when trying to print an array in Java尝试在 Java 中打印数组时出现异常
【发布时间】:2014-12-30 15:44:38
【问题描述】:

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

【问题讨论】:

    标签: java arrays loops for-loop


    【解决方案1】:

    问题在于增强的 for 循环给出了数组的值,而不是索引。所以,10 返回的值是一个无效的索引。

    你的循环开始:

    for (int i : revs) {
    

    等价于

    for (int index = 0; index < revs.length; index++)
    {
        int i = revs[index];
    }
    

    【讨论】:

    • 妈的,就是这么简单!谢谢! :)
    【解决方案2】:

    增强的 for 循环为您提供数组中的值,而不是索引。试试

    for (int i : revs) {
        System.out.println(i);
    }
    

    【讨论】:

      【解决方案3】:

      替换

      System.out.println(revs[i]);
      

      System.out.println(i);
      

      说明:变量i 是整数元素而不是索引。

      【讨论】:

        【解决方案4】:

        简单:

            for (int i : revs) {
                System.out.println(i);
            }
        

        您正在使用foreach 语句而不是for 索引循环。 foreach 循环为您迭代数组并将数组元素分配给i,因此不要将其视为数组的索引。

        这是For-Each Loop 上的 Oracle 文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-27
          • 1970-01-01
          • 2012-09-05
          • 1970-01-01
          相关资源
          最近更新 更多