抱歉,标题。我正在尝试编写一个程序,用相同大小的数组 B 中的元素替换数组 A 中的元素,同时还从数组 B 中删除这些元素。没什么花哨的,只是在考试前测试一下。
我尝试使用嵌套 for 循环来执行此操作,第一个是“传统 for 循环”,第二个是“增强 for 循环”,但由于某种原因,而不是用元素 0 替换数组 A 中的元素 0从数组 B 中,它用数组 B 中的元素 2 替换数组 A 中的所有元素。当尝试删除这些元素时,它给了我一个错误。知道为什么会发生这种情况吗?
输出包含在代码块中,因为如果不包含输出,stackoverflow 就不会让我发布。
第 30 行是“for(String s : list2)”。我取出了标题。
public class Test {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("one");
list1.add("two");
list1.add("three");
List<String> list2 = new ArrayList<>();
list2.add("four");
list2.add("five");
list2.add("six");
System.out.println(list1);
System.out.println(list2);
for(int i = 0; i < list1.size(); i++){
for(String s : list2){
list1.set(i, s);
//list2.remove(i);
}
}
System.out.println(list1);
}
}
没有“list2.remove(i)”行的输出:
[one, two, three]
[four, five, six]
[six, six, six]
带有“list2.remove(i)”行的输出:
[one, two, three]
[four, five, six]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at Test.main(Test.java:30)
C:\Users\izabe\AppData\Local\NetBeans\Cache\10.0\executor-
snippets\run.xml:111: The following error occurred while executing this
line:
C:\Users\izabe\AppData\Local\NetBeans\Cache\10.0\executor-
snippets\run.xml:94: Java returned: 1
最佳答案
你把事情搞得太复杂了。您正在“手动”执行您正在使用的类已经实现的事情!
这里真正的答案是退后一步,研究 Collection 的接口(interface),或者更恰本地说,List为您提供接口(interface)。
你发现有这样的调用:
另请注意,您的异常(exception)几乎是不言自明的,除此之外,已在这里多次询问和回答,请参阅 here例如。这里真正的答案还是:不要寻求解释,而是要保持好奇心,并使用搜索引擎。
你通过自己征服世界来学习编程,而不是通过向别人寻求解释。
关于java - 增强的 for 循环似乎会同时遍历所有元素。但这是应该的还是我的代码错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624793/