3—9如何写hashSet方法?按照视频中案例那样写好像不对啊

来源:3-11 编程练习

kris1992

2017-06-25 12:55:27

public class Student{
   //根据需求完成Student类的定义
   private int stuId;
   private String name;
   private float score;
   
   public Student(int stuId,String name,float score){
       this.setStuId(stuId);
       this.setName(name);
       this.setScore(score);
   }
   
   public int getStuId(){
       return stuId;
   }
   public void setStuId(int stuId){
       this.stuId=stuId;
   }
   
   public String getName(){
       return name;
   }
   public void setName(String name){
       this.name=name;
   }
   
   
   public float getScore(){
       return score;
   }
   public void setScore(float score){
       this.score=score;
   }
   
   public String toString(){
       return "[学号:"+this.getStuId()+",姓名:"+this.getName()+",成绩:"+this.getScore()+"]";
       
   }
   
   public float hashCode(){
       final int prime=31;
       float result=1;
       result=prime*result+stuId;
       result=prime*result+((name==null)?0:name.hashCode());
       result=prime*result+score;
       //result=prime*result+((score=0)?0:score.hashCode());
       return result;
}

public boolean equals(Object obj){
    if(this==obj)
        return true;
    if(obj.getClass()==Student.class){
        Student st=(Student)obj;
        return st.getStuId()==stuId&&st.getName().equals(name)&&st.getScore()==score;
    }
    return false;
}
   
}


写回答

2回答

好帮手慕珊

2017-06-26

hashCode()方法可以使用eclipse默认生成的方法,也可以自己定义。如果自己定义,具体怎么写对于项目来说要自己研究一套算法,所以对于初学者建议就用eclipse默认生成的即可。你的代码可以这么改,见下面的代码注释:

public int hashCode(){
       final int prime=31;
      int result=1;
       result=prime*result+stuId;
       result=prime*result+((name==null)?0:name.hashCode());
       result=prime*result+(int)score; //此处将score强制转换为整型就可以了
       //result=prime*result+((score=0)?0:score.hashCode());
       return result;
}

祝学习愉快!

0

好帮手慕珊

2017-06-25

hashCode方法吧,返回值是int类型,不是float类型。祝学习愉快!

0
hris1992
h 老师,我问的是里面的语法怎么写?你的这个回答没有解决我的问题,可否仔细回答下
h017-06-25
共2条回复

0 学习 · 7235 问题

查看课程