- 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,而不是基本类型。