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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵彦丰 于 2014-3-26 11:51 编辑

代码如下  帮我看看那出问题了  
  1. import java.util.*;

  2. /*
  3. * TreeSet 集合  中存储学生 按照年龄排序
  4. * */
  5. class test
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 TreeSet ts = new TreeSet(new myComp());
  10.                 ts.add(new Student("abs1",25));
  11.                 ts.add(new Student("abs2",30));
  12.                 ts.add(new Student("abs3",25));
  13.                 ts.add(new Student("abs4",18));
  14.                 ts.add(new Student("abs5",16));
  15.                
  16.                 Iterator it = ts.iterator();
  17.                
  18.                 while(it.hasNext())
  19.                 {
  20.                         Student s = (Student)it.next();
  21.                         System.out.println(s.getName()+"--"+s.getAge());
  22.                 }
  23.         }
  24. }
  25. class myComp implements comparator
  26. {
  27.         public int compare(Object o1, Object o2)
  28.         {
  29.                 Student s1 = (Student)o1;
  30.                 Student s2 = (Student)o2;
  31.                 int num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  32.                 if(num == 0)
  33.                 {
  34.                       return  s1.getName().compareTo(s2.getName());
  35.                 }
  36.                 return num;
  37.         }
  38. }

  39. class Student //implements Comparable
  40. {
  41.         private String name;
  42.         private int age;
  43.         
  44.         /*public int compareTo(Object obj)
  45.         {
  46.                 if(!(obj instanceof Student))
  47.                         throw new RuntimeException("不是学生对象");
  48.                 Student s = (Student)(obj);
  49.                 if(this.age>s.age)
  50.                         return 1;
  51.                 if(this.age==s.age)
  52.                         return this.name.compareTo(s.name);
  53.                 else
  54.                         return -1;
  55.         }*/
  56.         Student(String name, int age)
  57.         {
  58.                 this.name = name;
  59.                 this.age = age;
  60.         }
  61.         public String getName()
  62.         {
  63.                 return name;
  64.         }
  65.         public int getAge()
  66.         {
  67.                 return age;
  68.         }
  69. }
复制代码

错误提示

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

5 个回复

倒序浏览
大神帮忙看看啊
回复 使用道具 举报
  1. class myComp implements comparator
  2. {
  3.         public int compare(Object o1, Object o2)
  4.         {
  5.                 Student s1 = (Student)o1;
  6.                 Student s2 = (Student)o2;
  7.                 int num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));//有问题应该覆盖compare方法
  8.                 if(num == 0)
  9.                 {
  10.                       return  s1.getName().compareTo(s2.getName());//有问题应该覆盖compare方法
  11.                 }
  12.                 return num;
  13.         }
  14. }
复制代码

经过仔细查看,发现你的比较器写错了
第二种:让容器具备比较性。其实就是定义一个比较器,就是实现Comparator接口,覆盖compare方法

而你用的是compareTo,没有用compare,换成compare就好了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 残梦共飞雪 于 2014-3-26 12:54 编辑

首先,大java已经提示你了,找不到合适的构造器
就是找不到对应的构造方法!就是你的参数不正确

再看看你的接口
class myComp implements comparator
你看看哪错了!
友情提示:java区分大小写。

我也遇到过类似的问题,这就是抓狂!



论IDE的重要性。

QQ Photo20140326125415.jpg (26.42 KB, 下载次数: 29)

QQ Photo20140326125415.jpg

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. import java.util.*;

  2. /*
  3. * TreeSet 集合  中存储学生 按照年龄排序
  4. * */
  5. class Test
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 TreeSet ts = new TreeSet(new MyComp());
  10.                 ts.add(new Student("abs1",25));
  11.                 ts.add(new Student("abs2",30));
  12.                 ts.add(new Student("abs3",25));
  13.                 ts.add(new Student("abs4",18));
  14.                 ts.add(new Student("abs5",16));
  15.                
  16.                 Iterator it = ts.iterator();
  17.                
  18.                 while(it.hasNext())
  19.                 {
  20.                         Student s = (Student)it.next();
  21.                         System.out.println(s.getName()+"--"+s.getAge());
  22.                 }
  23.         }
  24. }
  25. class MyComp implements Comparator
  26. {
  27.         public int compare(Object o1, Object o2)
  28.         {
  29.                 Student s1 = (Student)o1;
  30.                 Student s2 = (Student)o2;
  31.                 int num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  32.                 if(num == 0)
  33.                 {
  34.                       return  s1.getName().compareTo(s2.getName());
  35.                 }
  36.                 return num;
  37.         }
  38. }

  39. class Student //implements Comparable
  40. {
  41.         private String name;
  42.         private int age;
  43.         
  44.         
  45.         Student(String name, int age)
  46.         {
  47.                 this.name = name;
  48.                 this.age = age;
  49.         }
  50.         public String getName()
  51.         {
  52.                 return name;
  53.         }
  54.         public int getAge()
  55.         {
  56.                 return age;
  57.         }
  58. }
复制代码

这是你上面的代码,帮你该 好了
内容没有错,就是类名,首字母要大写,实现 Comparator 首字母也要 大写 ,
朋友 你是笔误啊  

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报 1 0
学习代码 发表于 2014-3-26 13:46
这是你上面的代码,帮你该 好了
内容没有错,就是类名,首字母要大写,实现 Comparator 首字母也要 大写  ...

谢谢  郁闷了好久
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马