正在回答
3回答
你好同学,问题的主要原因出在了你的hashcode方法上,你的hashcode方法没有result = prime * result + ((name == null) ? 0 : name.hashCode());对名字进行判断的胆码, 建议同学使用如下方式进行创建,按Alt+Shift+S,然后选择下图标记的选项来创建方法。这样不会出现遗漏的错误。
修订之后的代码如下,祝学习愉快~
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 | 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; } //getter与setter方法 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 "[姓名:" + 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) { if ( this == obj) return true ; if (obj == null ) return false ; if (getClass() != obj.getClass()) return false ; Cat other = (Cat) obj; if (month != other.month) return false ; if (name == null ) { if (other.name != null ) return false ; } else if (!name.equals(other.name)) return false ; if (species == null ) { if (other.species != null ) return false ; } else if (!species.equals(other.species)) return false ; return true ; } } |
巴呆丶
2019-03-14 17:42:44
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | public class Cat { private String name; //姓名 private int month; //年龄 private String specise; //品种 public Cat() { } public Cat(String name, int month, String specise) { this .name = name; this .month = month; this .specise = specise; } 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 getSpecise() { return specise; } public void setSpecise(String specise) { this .specise = specise; } @Override public String toString() { return "{姓名:" + name + ", 年龄: " + month + ", 品种: " + specise+ "}" ; } @Override public boolean equals(Object o) { if ( this == o) return true ; if (!(o instanceof Cat)) return false ; Cat cat = (Cat) o; if (getMonth() != cat.getMonth()) return false ; if (getName() != null ? !getName().equals(cat.getName()) : cat.getName() != null ) return false ; return getSpecise() != null ? getSpecise().equals(cat.getSpecise()) : cat.getSpecise() == null ; } @Override public int hashCode() { int result = getName() != null ? getName().hashCode() : 0 ; result = 31 * result + getMonth(); result = 31 * result + (getSpecise() != null ? getSpecise().hashCode() : 0 ); return result; } } //============================================================= public class CatTest { public static void main(String[] args) { Cat one = new Cat( "花花" , 12 , "英国短毛猫" ); Cat two = new Cat( "凡凡" , 3 , "中华田园猫" ); Set set = new HashSet(); set.add(one); set.add(two); //打印输出宠物猫信息 Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println( "*********************" ); Cat once = new Cat( "花花" , 12 , "英国短毛猫" ); set.add(once); System.out.println( "添加重复信息后的宠物猫信息:" ); it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println( "**********************" ); //插入一个新的宠物猫 Cat one2 = new Cat( "花花二代" , 2 , "英国短毛猫" ); set.add(one2); System.out.println( "添加花花二代后的宠物猫信息: " ); it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println( "**********************" ); //在集合中查找花花的信息并输出 if (set.contains(one)) { System.out.println( "花花找到了" ); System.out.println(one); } else { System.out.println( "花花没找到" ); } //根据集合中的花花名字查找信息 boolean flag = false ; //定义一个值为false的Boolean类型变量flag Cat c = null ; //定义一个Cat对象初始化内容为null,方便在后面的输出语句中调用 it = set.iterator(); //重置迭代器 while (it.hasNext()) { //遍历数组 c = (Cat) it.next(); //将数组内容传给对象c if (c.getName().equals( "花花" )) { //判断对象中getName获得的姓名是否等于”花花“ flag = true ; //如果等于,则找到了,将flag重新赋值为true break ; //跳出循环 } } if (flag) { //如果flag为true System.out.println( "花花找到了" ); //输出字符串”花花找到了“ System.out.println(c); //输出此时c中的内容 } else { System.out.println( "花花没找到" ); //flag为false输入字符串"花花没找到" } } } |
chrismorgen
2019-03-14 17:36:43
你好同学,请问你的代码是如何写的呢?你应该是没有排序吧,建议同学将你的代码粘贴到“我要回答中”,否则会失去代码格式,这样方便老师为你修改错误,祝学习愉快~
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧