如何解决此代码中的ArrayIndexOutOfBoundsException?

时间:2015-11-13 13:25:24

标签: java arrays for-loop while-loop

我正在使用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)

3 个答案:

答案 0 :(得分:7)

使用

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

mary.length产生30。

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

答案 1 :(得分:5)

int[] mary = new int[30];

数组从0开始编制索引。

因此,int[30]数组将包含从029的有效索引

for(int a = 0; a < 31; a++)

在上一次迭代中,您正在访问超出数组范围的mary[30]

通过将其替换为

来解决此问题

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

使用此解决方案,如果您更改阵列的大小,则不必更改for循环

答案 2 :(得分:1)

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