2011-06-10 193 views
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) 

我明白我的数组越界,但到底是什么的这个Java错误是什么意思?

Index: 1365, Size: 1365

说明什么?

我怎么去解决这个问题?只需增加我的数组的大小?

回答

9

-Size是阵列(即能容纳元件的量)的大小。

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

注1:由于第一指数是0,你在哪里试图访问1+数组的maximim所以这就是为什么你得到了异常

fix选项1

要解决这个异常的情况下,你使用的是循环操作的元素,你可以做这样的事情:

for(int i = 0; i < array.length; i++) { 
    array[i].doSomething(); 
} 

fix选项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(); 
    } 
+0

谢谢你清理什么大小和索引是非常有帮助的。正是我需要的。 – 2011-06-10 19:24:33

+0

欢迎您:) – sfrj 2011-06-10 19:31:55

1

您访问索引#1365,在这里你只有#0-#1364本阵...
增加数组的大小是可能的,但我想将需要一个确切的答案更多的代码。 (例如,如果你迭代,但我< = array.length)

7

Java数组是0索引的,所以如果你有一个大小为1365的数组,有效索引是0,1,2 ...... 1364.您的代码中可能会出现错误的错误:您不会迭代到< length,而是重复到<= length或类似错误。

3

您在1365个元件的阵列访问索引1365。这是出界,因为允许范围为0至1364

是不是访问一个循环您的阵列?确保计数器变量没有达到数组的长度。

1

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

2

阵列通常是0索引意义的是,第一个元素的索引为0,你所得到的错误是因为你试图在指数1365(第1366来获取元素元素)放在一个只能容纳1365个元素的数组中。

2

增加数组不会解决你的错误的大小。问题在于你的逻辑。大多数probabl您使用的是有缺陷的循环,例如:

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循环以上的RID你必须记住长度/指数。