[英]What does this Java error mean?
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
表明?
我怎么能通过修复这个 go 呢? 只是增加我的数组的大小?
-Size 是数组的大小(可以容纳的元素数量)。
-Index 是您尝试访问的位置。
注意 1:由于第一个索引为 0,因此您尝试访问 1+ 数组的最大值,这就是您遇到该异常的原因
修复选项 1
要在您使用循环来操作元素的情况下修复此异常,您可以执行以下操作:
for(int i = 0; i < array.length; i++) {
array[i].doSomething();
}
修复选项 2
正如您所说,增加尺寸将是另一种选择。 你只需要做这样的事情:
MyArray[] ma = new MyArray[1366];
但是,如果您将来想再次增加它,那将不是很灵活。 因此,避免此类事情的另一种选择是使用更高级的数据结构或集合,例如 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();
}
Java arrays 是 0 索引的,因此如果您有一个大小为 1365 的数组,则有效索引为 0、1、2、... 1364。您的代码中可能有一个错误:而不是迭代到< length
,您迭代到<= length
或类似的。
您正在访问由 1365 个元素组成的数组中的索引 1365。 它超出了范围,因为允许的范围是 0 到 1364。
您是否正在循环访问您的数组? 确保计数器变量没有达到数组的长度。
Arrays 通常索引为 0,这意味着第一个元素位于索引 0。您得到的错误是因为您试图在只能容纳 1365 个元素的数组中获取索引 1365(第 1366 个元素)处的元素。
增加数组的大小不会修复您的错误。 问题在于你的逻辑。 很可能您使用的是有缺陷的循环,例如:
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 循环之类的东西可以让你不必记住长度/索引。
你访问索引#1365,在这个数组中你只有#0-#1364...
增加数组大小是可能的,但我想需要更多代码才能得到准确的答案。 (例如,如果您在 i <= array.length 时进行迭代,这将无济于事)
您的数组中有 1365 个元素,但第一个元素编号为 0。这意味着最后一个元素编号为 1364。您正在尝试获取不存在的项目 1365。 确保从 0 开始计数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.