ListIterator抛出“;“线程中的异常”;“主要”;java.util.ConcurrentModificationException“;JAVA
我在网上搜索了一下,但要么解释得太离谱,要么人们建议使用ArrayList来避免出现异常。。所以我现在有点无助。这是我的代码:ListIterator抛出“;“线程中的异常”;“主要”;java.util.ConcurrentModificationException“;JAVA,java,exception,arraylist,do-while,Java,Exception,Arraylist,Do While,我在网上搜索了一下,但要么解释得太离谱,要么人们建议使用ArrayList来避免出现异常。。所以我现在有点无助。这是我的代码: import java.util.ArrayList; import java.util.ListIterator; import java.util.Scanner; public class ArrayIterator { static Scanner scan = new Scanner(System.in); static ArrayList
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Scanner;
public class ArrayIterator {
static Scanner scan = new Scanner(System.in);
static ArrayList<String> simpleList = new ArrayList<>();
static ListIterator<String> simpleIterator = simpleList.listIterator(0);
static int b = 5;
public static void main(String[] args) {
getInput();
spellOutput();
}
private static void getInput(){
System.out.println("What do you want to add to your list? You can name five items");
for (int i = 0; i < b; i++) {
String m = scan.nextLine();
simpleList.add(m);
}
}
private static void spellOutput(){
System.out.println("Here are the items from your list: ");
do{
System.out.println(simpleIterator.next());
}while(simpleIterator.hasNext());
}
}
任何帮助都将不胜感激:)
simpleIterator.add(m)
问题是迭代器是在调用getInput()之前创建的 这里迭代器是从一个空列表创建的。禁止在迭代(搜索失败快速迭代器)时从结构上修改(添加或删除元素)集合
解决方案-将迭代器创建移动到spellOutput()。当在同一集合/列表/映射上执行另一个操作时,修改集合/列表/映射时,会发生并发修改 比如说
List<String> list = Arrays.asList("yes", "no", "maybe");
for(String string : list) { //operation 1 - list iteration
list.add("definitely not"); //operation 2 - add to list -- will throw concurrent modification exception because operation 1 is still pending.
}
List List=Arrays.asList(“是”、“否”、“可能”);
for(String:list){//操作1-列表迭代
list.add(“绝对不是”);//操作2-添加到列表-将引发并发修改异常,因为操作1仍处于挂起状态。
}
对于您的场景,要修复此问题,请删除
ListIterator<String> simpleIterator
ListIterator simpleIterator
作为全局变量,并在从扫描仪将元素添加到列表后对其进行初始化
private static void spellOutput() {
ListIterator<String> simpleIterator = simpleList.listIterator(0);
System.out.println("Here are the items from your list: ");
do {
System.out.println(simpleIterator.next());
} while(simpleIterator.hasNext());
}
private静态输出(){
ListIterator simpleIterator=simpleList.ListIterator(0);
System.out.println(“以下是列表中的项目:”);
做{
System.out.println(simpleIterator.next());
}while(simpleIterator.hasNext());
}
这样,就不会再有并发修改异常了您说得对,先生。那很容易!谢谢你的回答:)
private static void spellOutput() {
ListIterator<String> simpleIterator = simpleList.listIterator(0);
System.out.println("Here are the items from your list: ");
do {
System.out.println(simpleIterator.next());
} while(simpleIterator.hasNext());
}