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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马19我最牛 中级黑马   /  2013-4-9 01:18  /  981 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 许兵兵 于 2013-4-9 21:03 编辑
  1. package cn.itcast.test;
  2. import java.util.TreeSet;

  3. public class TreeSteDome11 {
  4.         //TreeSet  集合特点是,集合中没有相同的元素,并且集合中的元素有顺序,按照自然排序的方法排序
  5.         public static void main(String[] args) {
  6.                 TreeSet t2=new TreeSet();   //创建一个TreeSet集合  
  7.                 t2.add(new person("zhangsan1",21));  //给集合中增加元素
  8.                 t2.add(new person("zhangsan2",23));
  9.                 t2.add(new person("zhangsan4",24));
  10.                 t2.add(new person("zhangsan1",21));
  11.                 t2.add(new person("zhangsan3",23));
  12.                 System.out.println(t2);

  13.         }

  14. }
  15. //创建一个Person 类,并实现Comparable 接口,这样一来这个类就具有了自己的排序方法
  16. class person implements Comparable{
  17.         public String getName() {
  18.                 return name;
  19.         }
  20.         public void setName(String name) {
  21.                 this.name = name;
  22.         }
  23.         public int getAge() {
  24.                 return age;
  25.         }
  26.         public void setAge(int age) {
  27.                 this.age = age;
  28.         }
  29.         private String name;
  30.         private int age;
  31.         public person(String name, int age) {
  32.                 super();
  33.                 this.name = name;
  34.                 this.age = age;
  35.         }
  36.         //复写compareTo  ,建立自己的排序方法   以年龄为主要条件,姓名为次要条件,
  37.         public int compareTo(Object obj){
  38.                 person p=(person)obj;
  39.                 int num=this.age -p.age ;  //根据年龄排列
  40.                 return (num==0)?this.compareTo(p):num;   //如果年龄相同,再根据他们的姓名排列
  41.         }
  42.         //复写toString  ,建立自己的输出方式
  43.         public String toString(){
  44.                 return this.name +"..."+this.age ;
  45.         }
  46.         
  47. }
复制代码
郁闷啊,怎么都找不到问题在什么地方,一运行就报错,也不知道报错爆的是什么意思!
崩溃死!


异常信息:
Exception in thread "main" java.lang.StackOverflowError
        at cn.itcast.test.person.compareTo(TreeSteDome11.java:41)
        at cn.itcast.test.person.compareTo(TreeSteDome11.java:43)
        at cn.itcast.test.person.compareTo(TreeSteDome11.java:43)
        at cn.itcast.test.person.compareTo(TreeSteDome11.java:43)
        at cn.itcast.test.person.compareTo(TreeSteDome11.java:43)
        at cn.itcast.test.person.compareTo(TreeSteDome11.java:43)


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
return (num==0)?this.compareTo(p):num;   //如果年龄相同,再根据他们的姓名排
这个是return num==0?this.name.compareTo(p.name):num;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼上正解



但是不建议使用这种写法,因为可读性略差,容易把自己绕晕
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
黄小贝 发表于 2013-4-9 02:40
楼上正解

哦,明白了!那你建议用什么写法?
回复 使用道具 举报
许兵兵 发表于 2013-4-9 21:03
哦,明白了!那你建议用什么写法?

老老实实的if吧,我看过不少源码的确有你这样的写法,情况不复杂的确看起来很爽,如果对自己功底自信就这样写,如果不太熟,就 if 然后 return,虽然笨,但是出错率低
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马