运行时异常,请老师指点
来源:3-14 删除宠物猫信息
小啊白兔
2020-12-06 15:11:20
# 具体遇到的问题
运行异常
# 报错信息的截图# 相关课程内容截图
# 尝试过的解决思路和结果
做到了删除花花二代数据并重新输出,运行时异常
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代码,可通过选择【代码语言】突出显示
package com.imooc.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义宠物猫对象
Cat huahua=new Cat("花花",12,"英国短毛猫");
Cat fanfan=new Cat("凡凡",3,"中华田园猫");
//将宠物猫对象放入HashSet中
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());//输出的是地址信息,要在类中添加toString
}
//再添加一个与花花属性一样的猫
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);
it=set.iterator();
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("**********************");
//在集合中使用名字查找花花信息
boolean flag=false;
Cat c=null;
it=set.iterator();
while(it.hasNext()) {
c=it.next();
if(c.getName().contentEquals("花花")) {
flag=true;//找到了
break;
}
}
if(flag) {
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);
}
}
}
=======================================
package com.imooc.set;
public class Cat {
private String name;
private int month;
private String species;
public Cat(String name, int month, String species) {
super();
this.name = name;
this.month = month;
this.species = species;
}
//get\set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
@Override
public String toString() {
//return "Cat [name=" + name + ", month=" + month + ", species=" + species + "]";
return "Cat [姓名=" + name + ", 年龄=" + month + ", 品种=" + species + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((species == null) ? 0 : species.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//对象是否相等,相等返回true,不用比较了属性
if(this==obj)
return true;
//判断obj是否为Cat类的对象,如果是强制转换,返回属性比较的结果
if(obj.getClass()==Cat.class) {
Cat cat=(Cat)obj;
return cat.getName().equals(name)&&(cat.getMonth()==month)&&
(cat.getSpecies().equals(species));
}
return true;
}
}
1回答
好帮手慕小班
2020-12-06
同学你好,
java.util.ConcurrentModificationException这个异常出现的原因是在遍历集合时,对集合中的元素进行了修改。Java中是不允许一边遍历一遍进行修改集合中的元素,会出现数据的不一致性~贴出代码中,在遍历过程中对数据进行了添加,最后就会报出这个错误。
具体的解决办法,在视频的后续有具体讲解,比如:
相似问题