这个Java错误意味着什么?

这个Java错误意味着什么?,java,stack-trace,Java,Stack Trace,我知道我的数组超出了范围,但是 索引:1365,大小:1365 指示 我怎么能把它修好呢?只需增加我的数组的大小?您可以访问索引1365,而在此数组中您只有#0-#1364。。。 增加数组大小是可能的,但我想需要更多的代码才能得到准确的答案。(例如,如果在iJava数组是0索引的情况下进行迭代是没有帮助的,因此,如果您有一个大小为1365的数组,则有效的索引是0、1、2、…1364。您的代码中可能存在一个off by one错误:您不是迭代到

我知道我的数组超出了范围,但是

索引:1365,大小:1365

指示

我怎么能把它修好呢?只需增加我的数组的大小?

您可以访问索引1365,而在此数组中您只有#0-#1364。。。

增加数组大小是可能的,但我想需要更多的代码才能得到准确的答案。(例如,如果在iJava数组是0索引的情况下进行迭代是没有帮助的,因此,如果您有一个大小为1365的数组,则有效的索引是0、1、2、…1364。您的代码中可能存在一个off by one错误:您不是迭代到
,而是迭代到
,而是在一个1365个元素的数组中访问索引1365。这已经超出了限制。)边界,因为允许的范围是0到1364


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

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

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

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

-索引是您试图访问的位置

注意1:因为第一个索引是0,所以您试图访问1+数组的最大值,这就是为什么会出现异常

修复选项1

要在使用循环操作元素的情况下修复此异常,可以执行以下操作:

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)
for(int i = 0; i < array.length; i++) {
   array[i].doSomething();
}
但是 如果你想在将来再次增加它,那就不是很灵活了。所以避免这种情况的另一个选择是使用更高级的数据结构或集合,比如列表,因为它们在需要时会自动增加。 请参见此处有关数据结构的更多信息:

示例1创建:

MyArray[] ma =  new MyArray[1366];

增加阵列的大小不会修复您的错误。问题在于您的逻辑。很可能您使用的是有缺陷的循环,例如:

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

使用上面的for循环可以避免您必须记住长度/索引。

感谢您澄清了什么是大小和索引,非常有用。这正是我需要的。
 for(MyObject mo : myObjects) {
     MyObject tmpValue = mo;
    mo.doSomething();  
   }
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)
...