【问题标题】:ArrayIndexOutOfBoundsException when iterating through all the elements of an array遍历数组的所有元素时出现 ArrayIndexOutOfBoundsException
【发布时间】:2011-05-24 04:16:04
【问题描述】:

如何处理这个异常“ArrayIndexOutOfBoundsException” 我的代码:我创建了一个长度为 64 的数组,然后我初始化了每个索引,然后我打印索引以确保我填满所有索引,但它打印到 63 然后给出异常!任何想法

    public static void main(String [] arg) {
    int [] a=new int [64];
    for(int i=1;i<=a.length;i++){
        a[i]=i;
        System.out.println(i);
    }

}

【问题讨论】:

  • 但是当我将 for 循环更改为 for(int i=0;i
  • 您想收到一个例外吗?详细说明您想要实现的目标,我们将为您提供帮助:)
  • 在 Java 中,数组从索引 0 而不是 1 开始,因此当您的索引超过 63(变为 64)时,会抛出 ArrayIndexOutOfBoundsException。
  • 如果您需要详细说明我们为什么会出现此异常,您可以在下面阅读我的回答。

标签: java arrays


【解决方案1】:

Java 中的数组索引从0 开始,一直到array.length - 1。所以把循环改成for(int i=0;i&lt;a.length;i++)

【讨论】:

    【解决方案2】:

    索引从 0 开始,所以最后一个索引是 63。像这样更改你的 for 循环:
    for(int i=0;i&lt;a.length;i++){

    【讨论】:

      【解决方案3】:

      JLS-Arrays

      如果一个数组 有 n 个分量,我们说 n 是 数组的长度;的组成部分 使用整数引用数组 从 0 到 n - 1(含)的索引。

      所以你必须遍历[0,length()-1]

      for(int i=0;i<a.length;i++) {
          a[i]=i+1;  //add +1, because you want the content to be 1..64
          System.out.println(a[i]);
      
      }
      

      【讨论】:

        【解决方案4】:

        需要完整的解释吗?阅读本文

        数组的索引总是从0 开始。因此,当您的数组中有 64 个元素时,它们的索引将来自 0 to 63。如果您想访问第 64 个元素,则必须通过 a[63] 进行。

        现在,如果我们查看您的代码,那么您已将条件写入for(int i=1;i&lt;=a.length;i++),此处a.length 将返回数组的实际长度,即 64。

        这里发生了两件事

        1. 当您从 1 开始索引时,即 i=1,因此您将跳过数组的第一个元素,该元素将位于 0th 索引处。
        2. 最后,它试图访问a[64] 元素,这将成为数组的65th 元素。但是您的数组仅包含 64 个元素。这样你就得到了ArrayIndexOutOfBoundsException

        使用 for 循环迭代数组的正确方法是:

        for(int i=0;i &lt; a.length;i++)

        索引从0开始到&lt; array.length

        【讨论】:

          【解决方案5】:

          在 Java 中,数组总是从索引 0 开始。因此,如果您希望数组的最后一个索引为 64,则数组的大小必须为 64+1 = 65。

          //                       start   length
          int[] myArray = new int [1    +  64    ];
          

          【讨论】:

            【解决方案6】:

            您可以通过这种方式更正您的程序:

            int i = 0;     // Notice it starts from 0
            while (i < a.length) {
                a[i]=i;
                System.out.println(i++);
            }
            

            【讨论】:

            • 我宁愿推荐使用for循环,因为循环索引只在循环中可见。在您的情况下,iwhile 循环之后也可见。
            • @mklhmnn - 好点,但主要的是 i0 开始。
            【解决方案7】:

            你做错了数学。数组从 0 开始计数。例如int[] d = new int[2] 是一个计数为 0 和 1 的数组。

            您必须将整数“i”设置为 0 而不是 1 才能正常工作。因为你从 1 开始,你的 for 循环计数超过了数组的限制,并给你一个 ArrayIndexOutOfBoundsException。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-03-15
              • 1970-01-01
              • 2013-06-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-04-12
              • 1970-01-01
              相关资源
              最近更新 更多