我有一个数组列表我正在尝试向其中添加值,而我正在遇到异常。 我已多次使用此代码仍然无法弄清楚创建此错误的原因,下面是您的参考代码。
我使用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());
}
}
答案 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。