2016-08-22 62 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

相关问题