黑马程序员技术交流社区

标题: 【求指导】这段代码到底有什么问题? [打印本页]

作者: zhangyibo    时间: 2015-10-20 13:19
标题: 【求指导】这段代码到底有什么问题?
毕老师的25天视频里面的第15天,Map联系里的。代码如下,我看了好久,明明写的和毕老师的一样,为什么他的运行结果是key是姓名和年龄,value是地址。而我的运行结果是这样的?C:\Users\yibo\Desktop


  1. import java.util.*;
  2. /*
  3. * 需求:每一个学生都有其对应的归属地
  4. * 学生:student   地址:String
  5. * 学生属性:姓名,年龄
  6. * 姓名和年龄相同视为同一个学生
  7. * 保证学生的唯一性
  8. * 将学生作为key,地址作为value存放。。。。因为一个地方可以有多个学生
  9. * 1.描述学生对象
  10. * 2.定义map集合
  11. * 3.获取map集合中的元素
  12. * */
  13. class MapText_学生归属地联系
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 //Student stu1= new Student("zhangsan",20);
  18.                 //Student stu2= new Student("lisi",30);
  19.                 //Student stu3= new Student("wangwu",22);
  20.                 //Student stu4= new Student("zhaoliu",27);
  21.                
  22.                 HashMap<Student,String> hm = new HashMap<Student,String>();
  23.                 hm.put(new Student("zhangsan",20),"beijing");
  24.                 hm.put(new Student("lisi",30),"nanjing");
  25.                 hm.put( new Student("wangwu",22),"jilin");
  26.                 hm.put(new Student("zhaoliu",27),"shanghai");
  27.                 Set<Student> keySet = hm.keySet();
  28.                 Iterator<Student> it = keySet.iterator();
  29.                 while(it.hasNext())
  30.                 {
  31.                         Student stu = it.next();
  32.                         String addr = hm.get(stu);
  33.                         System.out.println("key:"+stu+"..value:"+addr);
  34.                 }
  35.         }
  36. }
  37. class Student implements Comparable<Student>
  38. {
  39.         private String name;
  40.         private int age;
  41.         Student(String name,int age)
  42.         {
  43.                 this.name=name;
  44.                 this.age=age;
  45.         }
  46.         public int hashCode()
  47.         {
  48.                 return name.hashCode()+age*34;
  49.         }
  50.         public boolean equals(Object obj)
  51.         {
  52.                 if(!(obj instanceof Student))
  53.                         throw new ClassCastException("类型不匹配");
  54.                 Student s = (Student)obj;
  55.                 return this.name.equals(s.name)&&this.age == s.age;
  56.                
  57.                        
  58.         }
  59.         /*
  60.                  public int compareTo(Object obj)

  61.         {
  62.                 if(!(obj instanceof Student))
  63.                         throw new RuntimeException("不是学生对象,滚粗");
  64.                 Student s = obj;
  65.                 if(this.age==s.age)
  66.                         return this.name.compareTo(s.name);
  67.                 return 1;
  68.                
  69.         }
  70.         */
  71.         public int compareTo(Student s)
  72.         {
  73.                 int num = new Integer(this.age).compareTo(new Integer(s.age));
  74.                 if(num == 0)
  75.                         return this.name.compareTo(s.name);
  76.                 return num;
  77.         }
  78.         public String getName()
  79.         {
  80.                 return name;
  81.         }
  82.         public int getAge()
  83.         {
  84.                 return age;
  85.         }
  86. }
复制代码

作者: zhangyibo    时间: 2015-10-20 13:20
额。。。照片没粘上来。。。。我的运行结果是打印了stu的地址值
key:Student@aa9c331c..value:beijing
key:Student@d09b2f0d..value:jilin
key:Student@ecbb40d2..value:shanghai
key:Student@32b48f..value:nanjing
作者: polarfox17    时间: 2015-10-20 13:31
兄弟,你这个代码跟老师的不一样,再仔细看看,你打印的这个结果的原因是你的key是Student类型,打印的话结果就是每个student对象的地址值,应该是在建立student类的时候加入一个toString方法,return name+"   "+age,Student类中有了toString方法的话,打印的时候就会就会打印toString中的返回的东西了,
希望对你有帮助
作者: zhangyibo    时间: 2015-10-20 13:48
polarfox17 发表于 2015-10-20 13:31
兄弟,你这个代码跟老师的不一样,再仔细看看,你打印的这个结果的原因是你的key是Student类型,打印的话结 ...

也不是啊兄弟。。。我按你说的又重新覆写了一下toString方法,可是打出来的还是地址。。。毕老师主函数里写的key也是Student类的啊,这个不是泛型定的吗
作者: zhangyibo    时间: 2015-10-20 13:56
求解答啊。。。
作者: zhangyibo    时间: 2015-10-20 14:24
大家都没睡醒吗?。。。。
作者: bukai123    时间: 2015-10-20 16:04
都看到25天了啊,学了多久啊
作者: zhangyibo    时间: 2015-10-20 18:14
bukai123 发表于 2015-10-20 16:04
都看到25天了啊,学了多久啊

兄弟。。。是25里的第15天。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2