将元素添加到ArrayList时引发异常

时间:2011-08-11 11:55:38

标签: java arraylist enumeration

我有一个数组列表我正在尝试向其中添加值,而我正在遇到异常。 我已多次使用此代码仍然无法弄清楚创建此错误的原因,下面是您的参考代码。

我使用add方法的行我进入空指针异常, 所有上述值都将在控制台中打印出来

sid = new ArrayList<String>();
Enumeration e = Global.qtutlist.keys();
int qj=0; 
//iterate through Hashtable keys Enumeration
while(e.hasMoreElements())
{
    System.out.println("sid is key and its value id" );
    System.out.println(Integer.parseInt(e.nextElement().toString()));
    try
    {
        sid.add(e.nextElement().toString());
        System.out.println("lenght is "+ sid.size());
    }

    catch(Exception ex)
    {
        System.out.println("caught exception is"+ex.getMessage());

    }
}

6 个答案:

答案 0 :(得分:5)

你在循环中调用nextElement()两次并检查一次

如下所示

while(e.hasMoreElements())
        {   String item = e.nextElement().toString()
            System.out.println("sid is key and its value id" );
            System.out.println(Integer.parseInt(item));
            try{
            sid.add(item);
            System.out.println("lenght is "+ sid.size());
            }catch(Exception ex){
                System.out.println("caught exception is"+ex.getMessage());
            }
        }

如果显示NumberFormatException,则其中一个字符串无法解析为int

答案 1 :(得分:2)

你正在打电话

e.nextElement()

两次。将其存储在变量中,然后对该变量进行操作

while(e.hasMoreElements()) {
    Object o = e.nextElement();
    // ...
}

答案 2 :(得分:1)

您正在使用e.nextElement()两次。这不行。枚举使用Iterator设计模式,这意味着在内部计数器前进到下一个对象之前,您只能访问每个元素一次。请注意,hasMoreElements()不会使光标前进,只有nextElement()可以。

将结果存储在局部变量中并重复使用:

System.out.println("sid is key and its value id" );
String str = e.nextElement().toString();
System.out.println(Integer.parseInt(str));
try{
    sid.add(str);
    System.out.println("lenght is "+ sid.size());
}catch(Exception ex){
    System.out.println("caught exception is"+ex.getMessage());
}

答案 3 :(得分:0)

e.nextElement()为null,原因是你在null上执行toString()操作

答案 4 :(得分:0)

当您仅检查项目状态一次时,您将调用nextElement两次。

答案 5 :(得分:0)

您正在检查e.hasMoreElements()一次并在循环中拨打e.nextElement()两次。每次调用nextElement()都会增加内部标记,因此每次枚举中的元素数量为 odd 时,都会得到一个NPE。