2016-08-22 63 views
1

我收到錯誤java.lang.IndexOutOfBoundsException:指數:0,大小:0java.lang.IndexOutOfBoundsException:指數:0,大小:0例外

public Collection<AdDistribution> getAdDistribution(byte srch, byte cont) throws IndexOutOfBoundsException { 

    List<AdDistribution> mediums = new ArrayList<>(); 
    List<AdDistribution> adDistribution = new ArrayList<>(); 
      adDistribution.add(AdDistribution.SEARCH); 
      adDistribution.add(AdDistribution.CONTENT); 
      if (adDistribution.isEmpty()) { 
       return null; 
       } 

    if (srch == 0 && cont == 0) { 
     mediums = new ArrayList<>(); 
     mediums.set(0, adDistribution.get(0)); 
    } 
    if (srch == 1 || cont == 1) { 
     mediums = new ArrayList<>(); 
     if (srch == 1) { 
      mediums.set(0, adDistribution.get(0)); 
     } else if (cont == 1) { 
      mediums.set(0, adDistribution.get(1)); 
     } 
    } 
    if (srch == 1 && cont == 1) { 
     mediums = new ArrayList<>(); 
     mediums.set(0, adDistribution.get(0)); 
     mediums.set(1, adDistribution.get(1)); 
    } 
      return mediums; 
} 

回答

2

您需要使用

mediums.add(adDistribution.get(0)); 

而非mediums.set(0, adDistribution.get(0));

ArrayList.set(int, Object)要求存在是構成元件,以取代:

替換爲此列表中具有指定元素的指定位置處的元素。

拋出: IndexOutOfBoundsException - 如果索引超出範圍(index < 0 ||指數> =尺寸())

在一個新的列表,size() == 0,所以set(0, something)失敗。

+0

u能分享修改後的代碼 – Manju

+0

在我的回答:「你需要使用[修改代碼]而不是[你的代碼]「。對不起,這就是你從我這裏得到的一切:你需要自己付出一些努力。 –

4

的問題是,使用的是一組方法在索引更新元素0

組(索引,值)方法需要呈現指數

在一個元件,但您尚未」在此之前,在中等數組列表中添加了該位置的任何元素。

所以,你需要首先在索引0添加元素後只可以用一套方法更新

0

編輯: 我只是刪除了不必要的if語句,並簡化他們使你的代碼更易讀。
然後我已經替換了函數用函數,因爲這個集只能設置現有的元素。

EDIT2:基於Andy Turner的回答,我修改了我的代碼。感謝你的建議!

這些修改後,代碼應該是這樣的(添加/刪除/修改您的需求):

public Collection<AdDistribution> getAdDistribution(byte srch, byte cont) throws IndexOutOfBoundsException { 

    List<AdDistribution> mediums = new ArrayList<>(); 

    if((srch == 0 && cont == 0) || srch == 1) { 
     mediums.add(AdDistribution.SEARCH); 
    } 

    if(cont == 1) { 
     mediums.add(AdDistribution.CONTENT); 
    } 

    return mediums; 
} 
+0

「我只是刪除了不必要的if語句」你也可以刪除if(adDistribution.isEmpty()){',這永遠不會是錯誤的。 'adDistribution'也是多餘的:只需將'AdDistribution.SEARCH'和'AdDistribution.CONTENT'直接添加到'媒介'。 –

+0

感謝您的建議。起初我沒有注意那些代碼部分,我應該對所有的事情都更加準確。我編輯了我的評論。問候! – Pohkalopokh

相關問題