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
表示?
我怎么能解决这个问题呢?只是增加我的阵列的大小?
答案 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开始计算。