MyException - 我的异常网
当前位置:我的异常网» J2SE » in thread "main" java.lang.IndexOutOfB

in thread "main" java.lang.IndexOutOfBoundsException:

www.MyException.Cn  网友分享于:2013-11-26  浏览:2625次
请问错在哪里呢?
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,而不是基本类型。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有