黑马程序员技术交流社区
标题:
IndexOutOfBoundsException异常是什么意思?
[打印本页]
作者:
何清林
时间:
2014-2-28 14:53
标题:
IndexOutOfBoundsException异常是什么意思?
今天写程序的时候遇到了IndexOutOfBoundsException异常,解决不了,IndexOutOfBoundsException是什么异常?
废话不多说,先贴出代码:
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
作者:
kira
时间:
2014-2-28 15:07
数组角标越界 经常见的一个异常
作者:
skyname
时间:
2014-2-28 15:22
ArrayList就是传说中的动态数组,它可以动态的增加和减少元素 、实现了ICollection和IList接口 、灵活的设置数组的大小。要注意,ArrayList中remove()方法的使用:public E remove(int index) 移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1),所以,刚开始ArrayList.size()值是4,但当执行了remove之后,ArrayList中元素的个数就已经为3了,而for循环中size的值仍为4,当然会出现索引越界异常了。
import java.util.ArrayList;
import java.util.List;
public class ArrayListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> lis=new ArrayList<String>();
lis.add("hello");
lis.add("java");
lis.add("world");
lis.add("study");
System.out.println(lis.size());
//int size=lis.size();
for(int i=0;i<lis.size();i++){
if("world".equals(lis.get(i)))
lis.remove(i);
}
System.out.println(lis.size());
for(String li:lis){
System.out.println(li);
}
}
}
作者:
平凡成就非凡
时间:
2014-2-28 15:25
你把 int size=array.size( )定义在啦循环体外, size的值在这里是固定啦是4.当你在循环体中删除元素。ArratList的大小就变成啦3.所以你的角标就越界啦。
作者:
曾经的迷失
时间:
2014-2-28 16:07
本帖最后由 曾经的迷失 于 2014-2-28 16:14 编辑
因为你size不在for循环内,删除了一个元素后,元素变成了三个元素。而size还是指向原来的array.size(),也就是四个元素。所以最后报错,角标越界。把int size =array.size()定义在for循环内就ok了,以下代码共参考,可以明显看出元素的变化:
import java.util.*;
public class Test
{
public static void main(String[] args)
{
ArrayList<String> array = new ArrayList<String>();
array.add("hello");
array.add("itcast");
array.add("abc");
array.add("world");
//删除前。
print(array);
/**
通过for循环查找指定的元素,并删除
*/
for(int x=0; x<array.size(); x++)
{
if("abc".equals(array.get(x)))
{
array.remove(x);
}
}
//删除后
print(array);
}
/**
定义一个打印功能,把打印数组列表的功能封转起来。
*/
public static void print(ArrayList<String> array)
{
Iterator<String> it = array.iterator();
while(it.hasNext())
{
System.out.print(it.next()+"\t");
}
System.out.println();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2