2013-04-05 64 views
0

我知道這個問題已經被問了一百萬次。而且我覺得這個解決方案對於幾個小時沒有注視過它的人來說是相當明顯的。但是,我無法讓自己超越界限的例外。以下是錯誤:Java數組列表outofbounds

exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 207493, Size: 207493 
    at java.util.ArrayList.rangeCheck(ArrayList.java:604) 
    at java.util.ArrayList.get(ArrayList.java:382) 
    at affysureselect.AffySureSelect.main(AffySureSelect.java:92) 
Java Result: 1 

我想也許這可能是由於到ArrayList的大小來發生的事情,但如果是這樣的話我本來期望的誤差加法的時候,而不是越來越成。這裏是它垂死代碼:

String chrompos; 
    ArrayList<String> chromnum = new ArrayList<String>(); 
    while ((input2 = sbuff.readLine()) != null) { 
     prse = input2.split("\t"); 
     chromnum.add(prse[0]); 
     ... 
     chrompos = prse[7]; 
    } 
    int cnt = 0; 
    int cnt2 = 0; 
    if (chromnum.get(cnt).equals(chrompos)) { // line causing my untimely death 
     end = Integer.parseInt(chromposend.get(cnt2)); 
     start = Integer.parseInt(chromposstart.get(cnt2)); 
     ... 

我甚至嘗試添加:

if (cnt <= chromnum.size()) { //this line 
    if (chromnum.get(cnt).equals(chrompos)) { /before the dying line 

但它也死了,就弄,在追加。我錯過了什麼?

+0

'System.out.println'列表中,你會看到你有更少的元素比你想象的 – slezica 2013-04-05 03:48:34

+1

的問題是,你混淆了基於1的索引基於0的索引。如果你的列表有10個元素,元素存在的索引是'0-9'(當你使用'ArrayList.add(Object)'時,你的檢查確保'ArrayList'中的索引存在'如果(CNT nickb 2013-04-05 03:50:57

回答

1

如果您正在增加cnt,請確保它始終少於chromnum.size()。

應該是─

if (cnt < chromnum.size()) 
+0

哦。咄。我知道這將是一個非常愚蠢的事情。非常感謝。我會11分鐘接受。 – Stephopolis 2013-04-05 03:49:51

0

指數我不存在。您必須始終迭代到list.size() - 1

0

如果ArrayList的尺寸也爲i,則無法訪問索引i。最大可訪問指數是i-1。因此,即使您的List的尺寸也爲207493,即表示您試圖訪問207493 th索引的IndexOutOfBoundsException

請檢查以將您的list的尺寸縮小爲cnt

0

因爲,按照它的樣子,在如果循環您正在嘗試

chromnum.get(cnt) and cnt is initialized to 0. 

所以最有可能的問題是,代碼永遠不會進入while循環,伸出放碼在while循環之後的SOP並檢查數組列表大小。

0

刪除等號,

if (cnt < chromnum.size()) { //this line 
     if (chromnum.get(cnt).equals(chrompos)) { 

希望能幫助你:)

0

記住,列出從0開始,所以如果你有N個項目的列表的最後一個項目將是N - 1 (因爲0是第1個要素,1是第二等)

所以,你應該寫

if (cnt < chromnum.size()) { 

instea d的

if (cnt <= chromnum.size()) { 
0

1-based like Pascal:United States,English-speaking Canada。
0如C/Java:魁北克,(大部分?)歐洲。

這就是答案。問題是,電梯中的樓層是如何索引的。