这个Java错误是什么意思?

时间:2011-06-10 18:59:10

标签: java stack-trace

java.lang.IndexOutOfBoundsException: Index: 1365, Size: 1365
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.Engine.write(Engine.java:114)
at com.Engine.read(Engine.java:90)
at com.Engine.main(Engine.java:19)

我知道我的数组已经超出范围,但

是什么

Index: 1365, Size: 1365

表示?

我怎么能解决这个问题呢?只是增加我的阵列的大小?

7 个答案:

答案 0 :(得分:9)

-Size是数组的大小(可容纳的元素数量)。

-Index是您尝试访问的位置。

注1:由于第一个索引为0,因此您尝试访问数组的最大值1+,这就是您获得该异常的原因

FIX选项1

要修复此异常,如果您使用循环操作元素,可以执行以下操作:

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

FIX OPTION 2

正如你所说,增加尺寸将是另一种选择。你只需要这样做:

MyArray[] ma =  new MyArray[1366];

<强> BUT 如果您想在将来再次增加它,那将不是非常灵活。因此,避免这样的事情的另一个选择是使用更高级的数据结构或集合,如List,因为它们在需要时会自动增加。 请在此处查看有关数据结构的更多信息:http://tutorials.jenkov.com/java-collections/index.html

示例1创建:

List<MyObject> myObjects =  new ArrayList<MyObject>();

示例2迭代:

 for(MyObject mo : myObjects) {
     MyObject tmpValue = mo;
    mo.doSomething();  
   }

答案 1 :(得分:7)

Java数组是0索引的,所以如果你有一个大小为1365的数组,有效索引是0,1,2,... 1364.你的代码中可能有一个一个一个错误:而不是迭代到< length,您迭代到<= length或类似。

答案 2 :(得分:3)

您正在以1365个元素的数组访问索引1365。它超出范围,因为允许的范围是0到1364。

您是否在循环中访问数组?确保计数器变量没有达到数组的长度。

答案 3 :(得分:2)

数组通常为0索引,这意味着第一个元素位于索引0.您得到的错误是因为您试图在一个只能容纳1365个元素的数组中获取索引1365(第1366个元素)的元素。

答案 4 :(得分:2)

增加数组的大小不会修复你的错误。问题在于你的逻辑。大多数可能是你使用了一个有缺陷的循环,例如:

int max=1365;
for(int i=1; i<=max; ++i)
...

OR

int max=1365;
for(int i=0; i<=max; ++i)
...

你可以做的是:

int[] numbers = {1,2,3,4,5,6,7,8,9,10};

for(int num:numbers)
...

使用像上面的for循环这样的东西会让你不得不记住长度/索引。

答案 5 :(得分:1)

您访问索引#1365,此阵列中只有#0-#1364 ... 增加阵列大小是可能的,但我想更精确的答案需要更多的代码。 (例如,如果你在i&lt; = array.length)

的情况下进行迭代,它将无济于事

答案 6 :(得分:1)

您的数组中有1365个元素,但第一个元素编号为0.这意味着最后一个元素编号为1364.您正在尝试获取不存在的项目1365。确保你从0开始计算。