为什么这段代码会报错呢?
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 星