黑马程序员技术交流社区
标题: 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 |