删除宠物猫信息问题

来源:3-12 删除宠物猫信息

透明度88

2017-06-22 09:17:12

package com.imooc.cat;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class CatTast {

	public static void main(String[] args) {
		// 定义宠物猫对象
		Cat huahua = new Cat("花花", 12, "英国短毛猫");
		Cat fanfan = new Cat("凡凡", 6, "中华田园猫");
		Set<Cat> set = new HashSet<Cat>();
		set.add(huahua);
		set.add(fanfan);
		// 显示宠物猫信息
		Iterator<Cat> it = set.iterator();// <Cat>泛型,就不用强制类型转换
		System.out.println("宠物猫的信息:");
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		// 再添加一个与花花同样属性的对象
		Cat huahua1 = new Cat("花花", 12, "英国短毛猫");
		set.add(huahua1);
		System.out.println("****************************");
		it = set.iterator();
		System.out.println("添加重复宠物猫的信息:");
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		// 重新插入新宠物猫信息
		Cat huahua2 = new Cat("花花2", 2, "英国短毛猫");
		set.add(huahua2);
		System.out.println("****************************");
		it = set.iterator();
		System.out.println("添加花花2的信息:");
		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("通过名字找花花信息");
		it = set.iterator();
		Cat c = null;
		boolean flag = false;
		while (it.hasNext()) {
			c = it.next();
			if (c.getName().equals("花花")) {
				flag = true;
				break;
			}
		}
		if (flag) {
			System.out.println("花花找到了");
			System.out.println(c);
		} else
			System.out.println("花花没找到");
		System.out.println("****************************");
		// 删除花花2并重新输出
		//it = set.iterator();
		for (Cat cat : set) {
			if ("花花2".equals(cat.getName())) {
				set.remove(cat);
			}
		}

		System.out.println("删除2后的数据");
		for (Cat cat : set) {
			System.out.println(cat);
		}
	}

}

为什么会出现这样的异常错误

写回答

2回答

好帮手慕珊

2017-06-22

这个异常时由于在循环中进行remove()方法调用引起的,处理的方式就是调用完remove()方法后,程序不要再继续往下遍历了,调用break;语句跳出循环,就没有问题了。这个属于集合设计的问题,不允许删除后再进行循环遍历集合。祝学习愉快!

0

透明度88

提问者

2017-06-22

http://climg.mukewang.com/594b1b020001260109860344.jpg这个异常

0

0 学习 · 7235 问题

查看课程