【问题标题】:How to solve ArrayIndexOutOfBoundsException in this code?如何解决这段代码中的 ArrayIndexOutOfBoundsException?
【发布时间】:2016-02-15 02:18:42
【问题描述】:

我只是在使用 for 循环和 while 循环编写一个简单易用的程序, 并且发生了ArrayIndexOutOfBoundsException

这是我的代码:

public class ForWhileLoops
{
   public static void main(String[] args)
   {
     int[] mary = new int[30];

     for(int a = 0; a < 31; a++)
     {
      mary[a]= a*3;
     }
     for(int b = 0; b < 31; b++)
     {
       System.out.println(mary);
     }
     int c = 0;
     while(c < 31)
     {
       c++;
       System.out.println(c);
     }
  }
}

这是发生的错误:

java.lang.ArrayIndexOutOfBoundsException: 30
    at ForWhileLoops.main(ForWhileLoops.java:9)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

【问题讨论】:

标签: java arrays for-loop while-loop


【解决方案1】:

ArrayList 中只有 30 个空间(索引 0 到 29)。无法创建索引 31。

【讨论】:

    【解决方案2】:
    int[] mary = new int[30];
    

    数组从0开始索引。

    所以int[30] 数组将具有从029 的有效索引

    for(int a = 0; a &lt; 31; a++)

    在最后一次迭代中,您访问的 mary[30] 超出了您的数组范围。

    替换它来解决这个问题

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

    使用此解决方案,如果您更改数组的大小,则无需更改 for 循环

    【讨论】:

      【解决方案3】:

      使用

      for int(a = 0; a < mary.length; a++) { 
          ... 
      }
      

      mary.length 产生 30。

      您的数组有 30 个元素长。然而,第一个元素是 0,使 29 成为最后一个元素。

      【讨论】:

      • 如果有帮助,您能否将其标记为正确答案?在我的国家,他们驱逐 20 岁时 stackoverflow 声誉低于 500 的男孩
      猜你喜欢
      • 2022-12-07
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多