这个Java错误是什么意思?

9
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个回答

9
-Size是数组的大小(可以容纳的元素数量)。
-Index是您尝试访问的位置。
注意1:由于第一个索引是0,所以您尝试访问1个超过数组最大值的索引,因此出现了该异常。
修复选项1:
如果您使用循环来操作元素,可以采取以下措施来修复此异常:
for(int i = 0; i < array.length; i++) {
   array[i].doSomething();
}

修复选项 2

正如您所说,增加大小是另一种选择。您只需要执行以下操作:

MyArray[] ma =  new MyArray[1366];
但是,如果将来需要再次增加它,这种方法就不太灵活了。因此,避免这种情况的另一种选择是使用更高级的数据结构或集合,例如List,因为它们在需要时会自动增加。有关数据结构的更多信息,请参见此处

示例1的创建:

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

示例2迭代:

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

谢谢您澄清大小和索引的含义,非常有帮助。正是我所需要的。 - Dennis Martinez

7

Java数组是从0开始索引的,因此如果您有一个大小为1365的数组,有效的索引是0、1、2、... 1364。您的代码中可能存在一个偏移量错误:您迭代到<= length或类似的内容,而不是迭代到< length


3

您正在访问一个由1365个元素组成的数组中的索引1365。这超出了允许的范围,因为允许的范围是0到1364。

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


2

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


2

扩大数组的大小并不能解决您的错误。问题出在您的逻辑上。很可能您使用了有缺陷的循环,例如:

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

或者

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循环,可以避免需要记住长度/索引。


1

你访问了索引 #1365,但在这个数组中只有 #0-#1364...
增加数组大小是一种可能性,但我猜需要更多的代码才能得到一个精确的答案。(例如,如果你在迭代时使用 i <= array.length,那么这并没有帮助)


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接