为什么会报错错呢。
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);
}
}
}

正在回答
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);- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星