程序出现异常

程序出现异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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