黑马程序员技术交流社区

标题: TreeSet 选择器问题 我死活没看出来哪有毛病 [打印本页]

作者: 赵彦丰    时间: 2014-3-26 11:46
标题: TreeSet 选择器问题 我死活没看出来哪有毛病
本帖最后由 赵彦丰 于 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. }
复制代码

错误提示


作者: 赵彦丰    时间: 2014-3-26 11:58
大神帮忙看看啊
作者: 李东梁    时间: 2014-3-26 12:40
  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就好了
作者: 残梦共飞雪    时间: 2014-3-26 12:44
本帖最后由 残梦共飞雪 于 2014-3-26 12:54 编辑

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

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

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



论IDE的重要性。

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

QQ Photo20140326125415.jpg

作者: 学习代码    时间: 2014-3-26 13:46
  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 首字母也要 大写 ,
朋友 你是笔误啊  
作者: 赵彦丰    时间: 2014-3-26 15:15
学习代码 发表于 2014-3-26 13:46
这是你上面的代码,帮你该 好了
内容没有错,就是类名,首字母要大写,实现 Comparator 首字母也要 大写  ...

谢谢  郁闷了好久




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