繁体   English   中英

这个 Java 错误是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM