2011-04-28 79 views
0

下面的代码在行上引发IndexOutOfBoundsException Field f = getField(counter); 它为什么被抛出?当然,这个字段的存在是因为我是基于fieldcount循环的。或者,经理中的列表字段没有被保证是顺序的?如果这是我应该怎么删除一个屏幕,是类型的字段的情况下 - MyButtonField为什么抛出IndexOutOfBoundsException

感谢

 int fieldCount = getFieldCount() - 1; 
     if(fieldCount > 1){ 
      for(int counter = 0; counter <= fieldCount ; ++counter){ 
       Field f = getField(counter); 
       if(f instanceof MyButtonField){     
        delete(f); 
       } 
      } 
     } 
+0

你试过调试它看看你传递给getField()的值是什么? – Augusto 2011-04-28 10:02:05

回答

5

您还没有指定什么delete(f)做,但如果从字段列表中删除,那么你的“有效计数”将会有效减少。

要重写这个有点解决问题:

for (int index = getFieldCount() - 1; index >= 0; index--){ 
    Field f = getField(index); 
    if (f instanceof MyButtonField) { 
     delete(f); 
    } 
} 

这会从年底的领域,而不是开始,所以如果你删除它并不重要入场和一切洗牌 - 洗牌的项目将是你已经看过的项目。

+0

295K !!!!!!!!!!你怎么有这么多的名声?.............:-O ......太多了。 – 2011-04-28 10:07:39

+0

谢谢你回答如此之快,是的工作。 – 2011-04-28 10:08:48

1

最好的方法是使用Iterator进行迭代,然后调用方法remove()。 实施例:

 for(Iterator it = getFields().iterator();it.hasNext()){ 
      Field f = (Field) it.next(); 
      if(f instanceof MyButtonField){     
       it.remove(); 
      } 
     } 

方法getFields()必须返回领域元素的集合。

+1

原始问题没有指定它,但BlackBerry使用java-me,它没有迭代器 - 它具有枚举和枚举不支持'remove()' – 2011-04-28 17:47:05

相关问题