以下の拡張for文を利用したループ処理で①と③のコードで実行時エラーが発生します。
エラーが発生する場合と発生しない場合があり、拡張for文の動きがわかりません。
お知恵を貸していただきたい考え投稿させていただきました。
java
1 2 public static void main(String[] args) { 3 4 // ①のコード(実行時エラー) 5 ArrayList<String> list1 = new ArrayList<>(); 6 list1.add("A"); 7 list1.add("B"); 8 list1.add("C"); 9 for (String str : list1) { 10 if ("C".equals(str)) { 11 list1.remove(str); 12 }else { 13 System.out.println(str); 14 } 15 } 16 17 // ②のコード(正常終了) 18 ArrayList<String> list2 = new ArrayList<>(); 19 list2.add("A"); 20 list2.add("B"); 21 list2.add("C"); 22 list2.add("D"); 23 for (String str : list2) { 24 if ("C".equals(str)) { 25 list2.remove(str); 26 }else { 27 System.out.println(str); 28 } 29 } 30 // ③のコード(実行時エラー) 31 ArrayList<String> list3 = new ArrayList<>(); 32 list3.add("A"); 33 list3.add("B"); 34 list3.add("C"); 35 list3.add("D"); 36 list3.add("E"); 37 for (String str : list3) { 38 if ("C".equals(str)) { 39 list3.remove(str); 40 }else { 41 System.out.println(str); 42 } 43 } 44 } 45 46//実行結果 47①の結果 48 A 49 B 50 Exception in thread "main" java.util.ConcurrentModificationException 51 at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) 52 at java.util.ArrayList$Itr.next(ArrayList.java:851) 53 at Teratail.main(Teratail.java:11) 54②の結果 55 A 56 B 57③の結果 58 A 59 B 60 Exception in thread "main" java.util.ConcurrentModificationException 61 at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) 62 at java.util.ArrayList$Itr.next(ArrayList.java:851) 63 at Teratail.main(Teratail.java:40)
どうぞよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。