2015-09-29 76 views
0

在迭代兩個列表並顯示佈局中的項目時,我會在下面一行中獲取數組索引越界異常。如何獲得一個空檢查或一個條件使用下面的parallellist此數組索引超出範圍異常:Android

    public class ParallelList<T> implements Iterable<List<T>> { 

       private final List<List<T>> lists; 

       public ParallelList(List<T>... lists) { 
       this.lists = new ArrayList<List<T>>(lists.length); 
       this.lists.addAll(Arrays.asList(lists)); 
      } 

      public Iterator<List<T>> iterator() { 
       return new Iterator<List<T>>() { 
      private int loc = 0; 

      public boolean hasNext() { 
       boolean hasNext = false; 
       for (List<T> list : lists) { 
        hasNext |= (loc < list.size()); 
       } 
       return hasNext; 
      } 

      public List<T> next() { 
       List<T> vals = new ArrayList<T>(lists.size()); 
       for (int i=0; i<lists.size(); i++) { 
        if(loc < lists.get(i).size()){ 
         vals.add(lists.get(i).get(loc)); 
        } 
        // vals.add(loc < lists.get(i).size() ? lists.get(i).get(loc): null); 
       } 
       loc++; 
       return vals; 
      } 

      public void remove() { 
       for (List<T> list : lists) { 
        if (loc < list.size()) { 
         list.remove(loc); 
        } 
       } 
       } 
       }; 
      } 
      } 

錯誤不會得到錯誤

ParallelList<BaseItem> list = new ParallelList<BaseItem>(highlighted, normal); 
    for (List<BaseItem> ints : list) { 

     final BaseItem itemH = ints.get(0); 


     if(!ints.get(1).equals(null) && ints.size()!=0){ // error here at this line 
      final BaseItem itemn = ints.get(1); 


     } 

在這裏

  java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 
      at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
      at java.util.ArrayList.get(ArrayList.java:308) 

回答

0

您應該改變條件。首先確保名單的尺寸足夠大(即它有一個以上的元素),然後才嘗試訪問列表的第二個元素:

if(ints.size() > 1 && ints.get(1) != null) 
0

圍着它轉:

if(ints.size()!=0 && !ints.get(1).equals(null)) 

& &連接從左到右評估。所以當大小爲0時,左邊的部分已經是假的了。完整的& &表達式不能真正無差異!ints.get(1).equals(null)會被評估爲。因此它根本不會被執行。

BTW,第一個元素你真的想使用索引0:

if(ints.size()!=0 && !ints.get(0).equals(null)) 

if(ints.size()<=2 && !ints.get(1).equals(null)) 

PS:具有錯誤訊息仔細一看,原來,後者確實解決了你的問題。大小實際上是1,但你與索引1訪問的第二個項目(同樣,第一指數爲0)

0

你應該嘗試這些條件

if(!ints.isEmpty()){ 
final BaseItem itemH = ints.get(0); 


     if(ints.size()>=1 && !ints.get(1).equals(null)){ 
      final BaseItem itemn = ints.get(1); 
} 
} 

    } 
+0

這將崩潰的時候'ints.size()= = 1' –