当前位置: 代码迷 >> J2SE >> in thread "main" java.lang.IndexOutOfBoundsException:
  详细解决方案

in thread "main" java.lang.IndexOutOfBoundsException:

热度:366   发布时间:2016-04-24 18:09:58.0
请问错在哪里呢?
Java code
import java.util.*;public class a1{    public static void main ( String [ ] args )    {        List C = new ArrayList ( );                for ( int i = 0 ; i < 10 ; i ++ )        {            C.add ( new Character ( ( char ) ( i + 65 ) ) );        }                C.remove ( 2 );        C.remove ( 'E' );                System.out.print ( C );            }}

C.remove ( 'E' );这一行报错:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 69, Size: 9
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)


------解决方案--------------------
ArrayList有重载的remove方法 一个参数是int 一个参数是Object 你传入'E' 他会当成char 无法匹配Object参数的,将匹配int类型参数 发现可以转成int类型传入(也就是字符的ascii码),就用的remove(int)
E的ASCII码是69
如果你用 C.remove ( (Character)'E' );就可以了
------解决方案--------------------
package csdn;

import java.util.ArrayList;
import java.util.List;

public class Al {
public static void main(String[] args){

List<Object> C = new ArrayList<Object>();
for ( int i = 0 ; i < 10; i++){
C.add(new Character((char)(i+65)));
}
C.remove(2);
C.remove((Character)'E');
System.out.print(C);
}
}

------解决方案--------------------
因为E对应的ACII是69,所以执行C.remove('E')时,编译器会认为你想remove掉List索引为69的元素,但是你的List只有10个元素,所以会出现IndexOutOfBoundsException

想移除E可以这样用:
C.remove((Character)'E')

因为API中 remove(Object o),那个参数是Object,而不是基本类型。
  相关解决方案