A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 江大海 中级黑马   /  2013-5-21 19:06  /  1518 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

就是在TreeSet中,复写Comparable接口中的compareTo方法时
关于this.age 和传进来比较的stu.age之间的逻辑关系
它们的关系不就是三种吗???纠结这个问题一天了,哈哈,钻牛角尖了
代码展示如下


                                                                                                          --------------来自黑马云青年
  1. /*
  2.         用TreeSet存储自定义对象
  3.         自定义对象为Student,按年龄排序,如果年龄和姓名一行,就视为同一个人
  4.         因为对象是自定义的,所以它不具备比较性,所以我们就要让它实现Comparable接口,让它具备比较性
  5.         再复写compareTo方法,确定是按什么排序的
  6. */
  7. import java.util.*;
  8. class Student implements Comparable
  9. {
  10.         private String name;
  11.         private int age;
  12.         Student(String name,int age)
  13.         {
  14.                 this.name = name;
  15.                 this.age = age;
  16.         }
  17.         public String getName()
  18.         {
  19.                 return this.name;
  20.         }

  21.         public int getAge()
  22.         {
  23.                 return this.age;
  24.         }
  25.         public int compareTo(Object obj)
  26.         {

  27.                 if(!(obj instanceof Student))
  28.                         throw new RuntimeException("传入对象不一致");
  29.                 Student stu = (Student)obj;
  30.                 if (this.age>stu.age)//----------------问题在这一块
  31.                                                 //this.age 和stu.age的关系不就是三个吗?除了stu不属于stu的情况
  32.                                                 //可是为什么我的代码改成if(){}   else if (){} else if(){}就说我没有返回值类型呢???
  33.                                                 //我也知道这里的if满足了一个就return了,可是为什么我这样写不可以??
  34.                                                 //一定要把最后面那句改成else才行
  35.                         return 1;
  36.                 if(this.age==stu.age)//这里加不加else都可以
  37.                 {
  38.                         return this.name.compareTo(stu.name);
  39.                 }
  40.                 else//这里为什么一定要把if去掉??把if去掉的逻辑是什么??
  41.                                                                         //我的逻辑就是this.age与stu.age有三种情况,大,小,等
  42.                 {
  43.                         return -1;
  44.                 }
  45.                
  46.                        
  47.                
  48.                        
  49.         }
  50. }


  51. class TreeSetTest
  52. {
  53.         public static void main(String[] args)
  54.         {
  55.                 TreeSet ts = new TreeSet();
  56.                 ts.add(new Student("张1",19));
  57.                 ts.add(new Student("张2",12));
  58.                 ts.add(new Student("张2",12));
  59.                 ts.add(new Student("张3",13));
  60.                 ts.add(new Student("张4",19));
  61.                 Iterator it = ts.iterator();
  62.                 while (it.hasNext())
  63.                 {
  64.                         Student s = (Student)it.next();
  65.                         System.out.println(s.getName()+"-----"+s.getAge());

  66.                 }
  67.         }
  68. }
  69. class MyComparator implements Comparator
  70. {
  71.         public int compare(Object o1,Object o2)
  72.         {
  73.                
  74.                 Student s1 = (Student)o1;
  75.                 Student s2 = (Student)o2;
  76.                 int num = s1.getName().compareTo(s2.getName());
  77.                 if (num==0)
  78.                 {
  79.                         return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  80.                 }
  81.                 return num;
  82.         }
  83. }
复制代码

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
袁梦希 + 1 + 3 很给力!

查看全部评分

5 个回复

倒序浏览
其实像这样的问题比较多,其实在论坛搜一搜就可以的了。为了自己的学习,认真提问,加油吧,相信你
回复 使用道具 举报
楼主想要表述什么问题,我有点没明白?可不可以再细说一下  this.age 和stu.age的关系不就是三个吗  不明白什么意思
回复 使用道具 举报
楼主问哈子,这个java代码怎么截取下来的呀?我都迷茫了很久,求解
回复 使用道具 举报

RE: 关于逻辑if else的疑问

袁梦希 发表于 2013-5-21 19:17
楼主想要表述什么问题,我有点没明白?可不可以再细说一下  this.age 和stu.age的关系不就是三个吗  不明白 ...

哈哈,比较尴尬,等下团长,一会和你说
回复 使用道具 举报
问题解决就再次编辑更改问题类型,没有解决继续追问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马