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

Java 将元素添加到ArrayList时引发异常,java,arraylist,enumeration,Java,Arraylist,Enumeration,我有一个数组列表,我试图向其中添加值,但遇到异常。 我已经多次使用此代码,但仍然无法找出是什么导致了此错误,下面是供您参考的代码 我使用add方法的那一行出现了空指针异常, 以上所有值都将在控制台中打印) sid=newarraylist(); 枚举e=Global.qtutlist.keys(); int qj=0; //遍历哈希表键枚举 而(e.hasMoreElements()) { System.out.println(“sid是键及其值id”); System.out.println(

我有一个数组列表,我试图向其中添加值,但遇到异常。 我已经多次使用此代码,但仍然无法找出是什么导致了此错误,下面是供您参考的代码

我使用add方法的那一行出现了空指针异常, 以上所有值都将在控制台中打印)

sid=newarraylist();
枚举e=Global.qtutlist.keys();
int qj=0;
//遍历哈希表键枚举
而(e.hasMoreElements())
{
System.out.println(“sid是键及其值id”);
System.out.println(Integer.parseInt(例如nextElement().toString());
尝试
{
sid.add(例如nextElement().toString());
System.out.println(“长度为”+sid.size());
}
捕获(例外情况除外)
{
System.out.println(“捕获的异常为”+ex.getMessage());
}
}

您正在循环中调用
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

您正在循环中调用
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

e。nextElement()为null就是原因,您正在对null执行toString()操作 将结果存储在局部变量中,并重复使用:

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());
}

您正在使用e.nextElement()两次。这不行。枚举使用迭代器设计模式,这意味着在内部计数器前进到下一个对象之前,只能访问每个元素一次。请注意,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());
}
你在打电话吗

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

while(e.hasMoreElements()) {
    Object o = e.nextElement();
    // ...
}
你在打电话吗

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

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

当只检查一次项目存在时,调用nextElement两次。

当只检查一次项目存在时,调用nextElement两次。

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

您在循环中检查
e.hasMoreElements()
一次,调用
e.nextElement()
两次。每次调用
nextElement()
都会增加内部标记,因此每次枚举中的元素数都是奇数,你得到一个NPE。

你需要告诉我们哪一行发生了什么异常。@高于Max的所有人都说它是NullPointerException你需要告诉我们哪一行发生了什么异常。@高于Max的所有人都说它是NullPointerException加法,是不是
枚举
泛型?参数化它,这样就不必将每个值存储在基本的
对象
引用中。@Tom:True。我认为这不是问题所在,但是
ArrayList
被正确地参数化了,而
Enumeration
似乎并不矛盾。另外,
Enumeration
不是通用的吗?参数化它,这样就不必将每个值存储在基本的
对象
引用中。@Tom:True。我认为这不是问题所在,但是
ArrayList
被正确参数化,而
Enumeration
似乎并不矛盾。