程序出现异常

程序出现异常

package com.zdlog.set;

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("凡凡", 3, "中华田园猫");
		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("花花找到了");
		} else {
			System.out.println("花花没找到");
		}
		System.out.println("==================================");
		System.out.println("通过名字查找花花信息");
		// 在集合中使用名字查找花花的信息
		boolean flang = false;
		Cat c = null;
		it = set.iterator();
		while (it.hasNext()) {
			c = it.next();
			if (c.getName().equals("花花")) {
				flang = true;
				break;
			}
		}
		if (flang) {
			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);
		}

	}

}

http://img1.sycdn.imooc.com/climg//58b1924d00016c7e07240132.jpg

我看了视频上面老师没有出异常,但是我的出现异常了

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕珊 2017-02-26 08:28:00

您好!这个视频最后老师给出了一个说明,老师的代码没有出现异常是碰巧了。在循环中使用集合的remove方法会抛出这个异常。可以在循环外定义一个类的引用,如Cat cat=null,然后循环查询要删除的对象是否存在,如果存在赋值给cat,最后在循环外删除cat。如果不存在可以给出错误提示。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 为什么会出现这个错误呢?是因为花花二代在集合的第一个位置吗?那为什么删除集合第一个位置的对象就会出错呢?
    2017-03-06 16:51:45
  • 集合在遍历的过程中是依据一定的顺序进行的,而如果一边遍历一边删除,集合自己就不知道该按照什么方式去遍历了,所以删除操作不能在循环中进行。如果删除的刚好是集合最后一个元素,集合刚好都遍历完了,就没发生异常。
    2017-03-08 18:48:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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