2011-06-10 221 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你必須記住長度/指數。