为什么这段代码会报错呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class CatTest { public static void main(String[] args) { // 定义宠物猫对象 Cat huahua = new Cat( "花花" , 12 , "英国短毛猫" ); Cat fanfan = new Cat( "凡凡" , 13 , "中华田园猫" ); // 将宠物猫对象放入HashSet中 Set<Cat> set = new HashSet<Cat>(); set.add(huahua); set.add(fanfan); // 显示宠物猫信息 Iterator<Cat> it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // 再添加一个与花花属性一样的猫 Cat huahua01 = new Cat( "花花" , 12 , "英国短毛猫" ); set.add(huahua01); System.out.println( "******************************" ); System.out.println( "添加重复数据后的宠物信息:" ); it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // 重新插入一个新宠物猫 System.out.println( "******************************" ); Cat huahua02 = new Cat( "花花二代" , 2 , "英国短毛猫" ); set.add(huahua02); System.out.println( "添加花花二代后的宠物猫信息:" ); it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println( "******************************" ); // 在集合中查找花花的信息并输出 if (set.contains(huahua)) { System.out.println( "花花找到了!" ); System.out.println(huahua); } else { System.out.println( "花花没找到!" ); } System.out.println( "******************************" ); // 在集合中使用名字查找花花的信息 System.out.println( "通过名字查找花花信息" ); boolean flag = false ; Cat c = null ; it = set.iterator(); while (it.hasNext()) { c = (Cat) it.next(); if (c.getName().equals( "花花" )) { flag = true ; break ; } } if (flag) { System.out.println( "花花找到了" ); System.out.println(c); } else { System.out.println( "花花没找到" ); } // 删除花花二代的信息并重新输出 for (Cat cat : set) { if ( "花花二代" .equals(cat.getName())) { set.remove(cat); } } System.out.println( "******************************" ); System.out.println( "删除花花二代后的数据:" ); for (Cat cat : set) { System.out.println(cat); } } } |
27
收起
正在回答
1回答
// 删除花花二代的信息并重新输出
for (Cat cat : set) {
if ("花花二代".equals(cat.getName())) {
set.remove(cat);
}
}
你好!集合不允许在循环遍历时对集合元素进行删除。在上面的代码中,在循环中进行了集合元素的删除。如果删除的刚好是集合的最后一个元素,删除以后不再进行遍历了,那么此时就不会报错。如果删除的是中间的某个元素,删除之后还会接着遍历集合,那么就会报错。所以此处可以在set.remove(cat)后加上break
或者先进行查询,根据查询结果在循环外进行删除,就像查找花花的代码一样,如果flag为true就删除,否则给出错误提示。
祝学习愉快!
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧