删除宠物猫信息问题

删除宠物猫信息问题

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回答

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

提问者 透明度88 2017-06-22 09:19:03

http://img1.sycdn.imooc.com/climg//594b1b020001260109860344.jpg这个异常

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师