同样的问题,为什么我写的equals和hashcode方法还是返回false?
错误如上图。
public class Maptest {
Scanner input = new Scanner(System.in);
//private static final String ID = null;
private Map<String,Student> Students;
public Maptest(){
this.Students=new HashMap<String,Student>();
}
public void testPut(){
Scanner input=new Scanner(System.in);
int i=1;
while(i<=3){//3个学生
System.out.print("请输入第"+i+"学生ID:");
String ID=input.next();
Student st = Students.get(ID);//保存id,判断id是否被占用
if(st==null){//如果当前id为空
System.out.print("请输入学生姓名:");
String name=input.next();
Student stu=new Student();//保存学生信息,set保存信息
stu.set(ID,name);
Students.put(ID,stu);//通过put,添加id学生映射,保存id
System.out.println("添加学生:"+Students.get(ID).name);
i++;//i加1
}else{//否则
System.out.println("id已存在");
continue;//继续循环
}
}
}
public void testKeySet(){ //打印出所有学生
Set<String>keySet=Students.keySet();//通过KeySet方法,返回Map中的所有"键"的Set集合
//取得Students容量
System.out.println("总共有"+Students.size()+"名学生");//size返回
for(String stuid:keySet){//学生id
Student st=Students.get(stuid);
if(st!=null)//st如果不为空
System.out.println("学生:"+st.id+":"+st.name);
}
}
//删除学生
public void romoveStu(){
Scanner input=new Scanner(System.in);
System.out.println("请输入要删除学生的数量:");
int a=input.nextInt();
while(true){
for(int i=1;i<=a;i++){
if(a>Students.size()){
System.out.println("数量大于学生总量!!!");
continue;
}else if(a==0){
break;
}else{
}
System.out.print("请输入要删除的第"+i+"位学生ID:");
String ID=input.next();
Student st=(Student)Students.get(ID);
if(st==null){
System.out.println("id不存在");
continue;
}
Students.remove(ID);
System.out.println("成功删除学生:"+st.name);
}
break;
}
}
//通过entrySet方法来遍历Map
public void testentrySet(){//输出被删除后剩余的学生
Set<Entry<String,Student>>entrySet=Students.entrySet();
for (Entry<String, Student> entry : entrySet) {
System.out.println("剩余学生id:"+entry.getKey());//对应的id
System.out.println("学生姓名:"+entry.getValue().name);//对应的值
}
}
//修改学生内容
public void testModifly(){
System.out.println("请输入要修改的学生id:");
Scanner input = new Scanner(System.in);
while(true){
String stuId = input.next();
Student st=Students.get(stuId);//保存当前id
if(st==null){
System.out.println("id不存在");
continue;
}else{
System.out.println("当前ID所对应的学生:"+st.name);
System.out.println("请输入新的学生姓名:");
String name=input.next();
String id;
Student newStu=new Student();//重新保存信息
newStu.set(stuId,name);
Students.put(stuId,newStu);//属性.put(信息变量名,对象名)
System.out.println("修改成功!:");
System.out.println("修改后的学生:");
testKeySet();
break;
}
}
}
//测试map中是否包含某个key值或value值
public void testContainsKeyOrVaule(){
System.out.print("请输入要查询的学生id:");
String id=input.next();
System.out.println("您输入的学生:"+id+","+"是否存在:"+Students.containsKey(id));
if(Students.containsKey(id)){
System.out.println("学生姓名:"+Students.get(id).name); //输出和id对应的姓名
}
}
//containsValue方法判断学生是否存在
public void testContainsKeyOrVaule1(){
System.out.println("请输入学生姓名:");
String name=input.next();
if(Students.containsValue(name)){
System.out.println("包含学生"+name+"对应的id"+Students.get(name).id);
}else{
System.out.println("不包含");
}
}
public static void main(String[] args) {
Maptest p=new Maptest();
p.testPut();
p.testKeySet();
p.romoveStu();
p.testentrySet();
p.testKeySet();//删除学生后在调用所有学生的方法是删除学生后的学生
//p.testModifly();//修改学生
p.testContainsKeyOrVaule();
p.testContainsKeyOrVaule1();
}
}
public class Student {
String id;//学生
String name;
static Set <Class>cla;//学生所选的课程信息属性
public Student(String id,String name){//将最终的值赋给构造方法
this.name = name;
this.id=id;
this.cla=new HashSet<Class>();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Student))
return false;
Student other = (Student) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
首先,你得把代码贴出来