Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我';当尝试打印两个ArrayList时,是否出现并发修改异常?_Java_Arraylist - Fatal编程技术网

Java 为什么我';当尝试打印两个ArrayList时,是否出现并发修改异常?

Java 为什么我';当尝试打印两个ArrayList时,是否出现并发修改异常?,java,arraylist,Java,Arraylist,我想使用两个while条件打印两个ArrayList的元素。但我在尝试实现时遇到了并发修改异常 我做错了什么 public void Insert_Answers(Enumeration<String> ques, Enumeration<String> ans){ try { while(ans.hasMoreElements()){ String answer = ans.nextElement();

我想使用两个while条件打印两个ArrayList的元素。但我在尝试实现时遇到了并发修改异常

我做错了什么

public void Insert_Answers(Enumeration<String> ques, Enumeration<String> ans){

    try {

        while(ans.hasMoreElements()){
            String answer = ans.nextElement();

            System.out.println(answer);

           while(ques.hasMoreElements()){

               String question = ques.nextElement();
               System.out.println(question);

         }
        }
    } 
     catch (Exception ex) {
        Logger.getLogger(DbInsert.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public void Insert\u答案(枚举问题、枚举问题){
试一试{
while(ans.hasMoreElements()){
字符串answer=ans.nextElement();
System.out.println(应答);
while(ques.hasMoreElements()){
字符串问题=ques.nextElement();
System.out.println(问题);
}
}
} 
捕获(例外情况除外){
Logger.getLogger(DbInsert.class.getName()).log(Level.SEVERE,null,ex);
}
}
这是包含main方法的Test.java类

public class Test {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    DbInsert dbIns = new DbInsert();

    ArrayList<String> arr1 = new ArrayList<String>();
    arr1.add("a");
    arr1.add("b");
    arr1.add("c");
    arr1.add("d");
    Enumeration earr1 = Collections.enumeration(arr1);

    ArrayList<String> arr2 = new ArrayList<String>();
    arr2.add("e");
    arr1.add("f");
    arr1.add("g");
    arr1.add("h");
    Enumeration earr2 = Collections.enumeration(arr2);

    dbIns.Insert_Answers(earr1, earr2);
}

}
公共类测试{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
DbInsert dbIns=new DbInsert();
ArrayList arr1=新的ArrayList();
arr1.添加(“a”);
arr1.添加(“b”);
arr1.添加(“c”);
arr1.添加(“d”);
枚举arr1=集合。枚举(arr1);
ArrayList arr2=新的ArrayList();
arr2.添加(“e”);
arr1.添加(“f”);
arr1.添加(“g”);
arr1.添加(“h”);
枚举2=集合.枚举(arr2);
插入答案(耳环1、耳环2);
}
}

我猜你在填充
arr2

arr2.add("e");
arr1.add("f");
arr1.add("g");
arr1.add("h");
arr2.add("e");
arr2.add("f");
arr2.add("g");
arr2.add("h");
您可能是想将这些添加到
arr2

arr2.add("e");
arr1.add("f");
arr1.add("g");
arr1.add("h");
arr2.add("e");
arr2.add("f");
arr2.add("g");
arr2.add("h");
发生并发修改错误的原因是,您正在迭代过程中添加到支持列表

我也不清楚为什么要使用
枚举
。您应该使用
迭代器

Iterator<String> arr1Iter = arr1.iterator();
Iterator arr1Iter=arr1.Iterator();

关于为什么应该使用迭代器,请参见另一个SO问题:

为什么要使用Java 1.1的样式
枚举
s而不是更现代的
迭代器
s(更不用说增强的
for
循环了)?枚举不允许修改集合,但您正在尝试更改Arr1原来是这样的:D感谢您指出这一点。我对所有这些都不太熟悉,只是想测试这种方法是否适用于arraylist。将使用迭代器进行实现。再次感谢您的建议:)