为了账号安全,请及时绑定邮箱和手机立即绑定

同样的问题,为什么我写的equals和hashcode方法还是返回false?

同样的问题,为什么我写的equals和hashcode方法还是返回false?

正在回答

4 回答

http://img1.sycdn.imooc.com//59a2999300014eec10900490.jpg

错误如上图。

1 回复 有任何疑惑可以回复我~
#1

左岸的风有咖啡香

是的是的。这里没有接触过的很容易搞错。我就被坑在这好久
2017-11-13 回复 有任何疑惑可以回复我~

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();

}

}


0 回复 有任何疑惑可以回复我~

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;

}

}


0 回复 有任何疑惑可以回复我~
#1

慕标6149872

就这些咋看,主程序那?
2017-04-21 回复 有任何疑惑可以回复我~

首先,你得把代码贴出来

0 回复 有任何疑惑可以回复我~
#1

东方的小王 提问者

看楼下
2017-04-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

同样的问题,为什么我写的equals和hashcode方法还是返回false?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信