为什么会报错错呢。

为什么会报错错呢。

package com.immoc.test;


import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;


public class Test {


public static void main(String[] args) {

// TODO 自动生成的方法存根

Cat c=new Cat("小徐",20,"红色猫");

Cat c1=new Cat("小广",12,"绿色猫");

Set<Cat> s=new HashSet<Cat>();

s.add(c);

s.add(c1);

Iterator<Cat> it=s.iterator();

while(it.hasNext()){

System.out.println(it.next()+" ");

}

System.out.println("**********************");

Cat c2=new Cat("小广",13,"绿色猫");

s.add(c2);

it=s.iterator();

while(it.hasNext()){

System.out.println(it.next()+" ");

}

/**

* 判断是否有此对象

* 有的话则输出对象信息

*/

System.out.println("**********************");

if(s.contains(c1)){

System.out.println("找到了:");

System.out.println(c1);

}else{

System.out.println("没找到");

}

/**

* 按姓名查找是否有对象信息

* 有则输出对象信息

*/

System.out.println("**********************");

boolean f=false;

Cat c3=null;

it=s.iterator();

while(it.hasNext()){

c3=it.next();

if(c3.getName().equals("小广")){

f=true;

break;

}

}

if(f){

System.out.println("找到了:");

System.out.println(c3);

}else{

System.out.println("没找到");

}

System.out.println("*********************");

//删除指定信息

for(Cat cat:s){

if(cat.getName().equals("小广") && cat.getSpecies().equals("绿色猫")){

s.remove(cat);

}

}

for(Cat cat:s){

System.out.println(cat);

}

}


}

http://img1.sycdn.imooc.com//climg/5f76a00309b1e0a506100193.jpg

正在回答

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

1回答
for(Cat cat:s){
	if(cat.getName().equals("小广") && cat.getSpecies().equals("绿色猫")){
		s.remove(cat);
	}
}

这里是删除操作,for循环次数是根据s内有的元素的个数决定的,比如s内有3个对象,那for循环就执3次,但是如果在for循环内部,删除了s内的对象,造成s内的元素个数减少,就会使for循环混乱,所以报错(如果for循环的最后一次循环才删除s内的对象,则不会报错)。

正确做法是,先用一个变量代替这个要删除的cat,然后for循环结束后,再删除。

Cat cat1 = new Cat();
for(Cat cat:s){
    if(cat.getName().equals("小广") && cat.getSpecies().equals("绿色猫")){
        cat1 = cat;
    }
}
s.remove(cat1);


  • 第一行我写错了,Cat cat1 = null;就可以了。
    2020-10-03 10:30:29
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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