2014-11-06 66 views
-1

所以,我正在編寫一個代碼來查找輸入數字中最長的子序列。IndexOutOfBoundsException問題

int curr_len = 0, max_len = 0, start = 0; 

    for (int i = 1; i <= listN.size(); i++){ 
     if (listN.get(i-1) < listN.get(i)){ 
      curr_len++; 
      if (curr_len >= max_len){ 
       max_len = curr_len; 
       start = i - max_len + 1; 
      } 
     } else { 
      curr_len = 1; 
     } 
    } 

    for (int i = 0; i < max_len; i++) 
     listAsc.add(start+i); 

的問題是,我得到了IndexOutOfBoundsException異常的代碼,片段

if (listN.get(i-1) < listN.get(i)) 

任何人都可以幫助如何正確地做到這一點?

回答

1

使用

for (int i = 1; i < listN.size(); i++){ 

作爲索引從0開始使用一個索引< 0或> = listN.size()引起的get(ⅰ)IndexOutOfBoundsException

參見:http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#get%28int%29

+0

這是事實,但OP的方式有它不會導致100B中,它會只是想迭代一次比它應該少。 1 - list.N.size()-1應該仍然是一個有效範圍,如果不正確的話。 – dckuehn 2014-11-06 20:52:36

+0

好的。現在正在工作。謝謝。 – user3165933 2014-11-06 20:59:19