黑马程序员技术交流社区

标题: IndexOutOfBoundsException异常 [打印本页]

作者: 不愿一人    时间: 2013-12-23 12:37
标题: IndexOutOfBoundsException异常
几天看了一些java测试题,有这样一个问题:
一个ArrayList对象alist中存有若干个字符串元素,请遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素.
下面是我写的代码:
import java.util.ArrayList;
public class Test1
{
public static void main(String[] args)
{
  ArrayList<String> array = new ArrayList<String>();  array.add("hello");
  array.add("itcast");
  array.add("abc");
  array.add("world");  int size = array.size();  for(int x=0; x<size; x++)
  {
   if("abc".equals(array.get(x)))
   {
    array.remove(x);
   
   }
  }
}
}
但是出现这样的异常,Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
请大神帮忙看看

作者: 迪兰奇迹    时间: 2013-12-23 13:13
楼主,出现角标越界异常主要是因为:     在  for(int x=0; x<size; x++)          {
                   if("abc".equals(array.get(x)))
                   {
                      array.remove(x);
                    
                   }
          }中 size是4,所以可以取到x=3这个角标的元素,但是

     array.remove(x)后实际上集合中还有三个元素,也就是说x这个角标此时
只能取到2,于是乎发生 IndexOutOfBoundsException异常
     为什么楼主不使用  ListIterator呢?,这样就不会发生上边的问题了,
可以用以下代码替换掉for循环:
  ListIterator  li = array.listIterator();
          while(li.hasNext()){
                 String str = (String) li.next();
                  if("abc".equals(str))
                   {
                      li.remove();
                   }
          }


作者: 776699    时间: 2013-12-23 13:15
array.add("world");  int size = array.size();  for(int x=0; x<size-1; x++),角标越界。应判断x<size-1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2