为什么这段代码会报错呢?
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积分~
来为老师/同学的回答评分吧
0 星