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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmlovewhr 中级黑马   /  2013-7-6 10:02  /  1466 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵海洋 于 2013-7-6 18:17 编辑

import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
  TreeSet ts=new TreeSet(new Student());
  ts.add("lisi01",22);
  ts.add("lisi02",20);
  ts.add("lisi04",19);
  ts.add("lisi03",19);
  Iterator it=ts.iterator();
  while(it.hasNext())
  {
   Student stu=(Student)it.next();
   System.out.println(stu.getName()+"..."+stu.getAge());
  }
}
}
class Student implements Comparable//该接口强制让学生具备比较性
{
private String name;
private int age;
Student(String name,int age)
{
  this.name=name;
  this.age=age;
}
public int compareTo(Object obj)
{
  if(!(obj instanceof Student))
   throw new RuntimeException("不是学生对象");
  Student s=(Student)obj;
  System.out.println(this.name+"......compareTo......"+s.name);
  if(this.age>s.age)
   return 1;
  if(this.age==s.age)
  {
   return this.name.compareTo(s.name);
  }
   return -1;
}
public String getName()
{
  return this.name;
}
public int getAge()
{
  return this.age;
}
}
该程序报了个错,说是找不到符号,但我不明白,哪出问题了?求解

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

9 个回复

倒序浏览
代码好像不完整
回复 使用道具 举报
本帖最后由 lkjghvcx@163.co 于 2013-7-6 10:21 编辑

没明白楼主的意思:改了下 TreeSet ts=new TreeSet(); //应该这样
  ts.add(new Student("lisi01",22)); //这样添加


  1. import java.util.*;
  2. class TreeSetDemo
  3. {
  4. public static void main(String[] args)
  5. {
  6. //  TreeSet ts=new TreeSet(new Student());
  7.         TreeSet ts=new TreeSet();  <font color="#ff0000">//应该这样</font>
  8.         //TreeSet<Student> ts=new TreeSet<Student>(); 或者用泛型
  9. //  ts.add("lisi01",22);
  10.       <font color="#ff0000">  ts.add(new Student("lisi01",22));  </font>
  11. //  ts.add("lisi02",20);
  12.         ts.add(new Student("lisi02",20));
  13. //  ts.add("lisi04",19);
  14.         ts.add(new Student("lisi04",19));
  15. //  ts.add("lisi03",19);
  16.         ts.add(new Student("lisi03",19));
  17.   Iterator it=ts.iterator();
  18.   while(it.hasNext())
  19.   {
  20.    Student stu=(Student)it.next();
  21.    System.out.println(stu.getName()+"..."+stu.getAge());
  22.   }
  23. }
  24. }


  25. class Student implements Comparable//该接口强制让学生具备比较性
  26. {
  27. private String name;
  28. private int age;
  29. Student(String name,int age)
  30. {
  31.   this.name=name;
  32.   this.age=age;
  33. }
  34. public int compareTo(Object obj)
  35. {
  36.   if(!(obj instanceof Student))
  37.    throw new RuntimeException("不是学生对象");
  38.   Student s=(Student)obj;
  39.   System.out.println(this.name+"......compareTo......"+s.name);
  40.   if(this.age>s.age)
  41.    return 1;
  42.   if(this.age==s.age)
  43.   {
  44.    return this.name.compareTo(s.name);
  45.   }
  46.    return -1;
  47. }
  48. public String getName()
  49. {
  50.   return this.name;
  51. }
  52. public int getAge()
  53. {
  54.   return this.age;
  55. }
  56. }
复制代码
控制台输出:
lisi02......compareTo......lisi01
lisi04......compareTo......lisi01
lisi04......compareTo......lisi02
lisi03......compareTo......lisi02
lisi03......compareTo......lisi04
lisi03...19
lisi04...19
lisi02...20
lisi01...22

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
TreeSet ts=new TreeSet(new Student()); 没这种写法
回复 使用道具 举报
兄弟你的主函数有问题,向集合里添加对象哪里:
TreeSet ts=new TreeSet();
  ts.add(new Student("lisi01",22));
  ts.add(new Student("lisi02",20));
  ts.add(new Student("lisi04",19));
  ts.add(new Student("lisi03",19));
把这个改了就行,你也可以给集合上加个泛型。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
是这段代码有问题:
  TreeSet ts=new TreeSet(new Student());           //如果要用泛型是new TreeSet<Student>();   
                                                     //括号中添加的是比较器或其他集合,而不是存储数据类型的对象。
  ts.add("lisi01",22);         //此处添加对象的方式应该是ts.add(new Student("lisi01",22));
  ts.add("lisi02",20);         //以下同上。
  ts.add("lisi04",19);
  ts.add("lisi03",19);
然后应该就木有问题,Lz这部分的基础有点不牢,O(∩_∩)O~,要加油哦。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报

  1. <P>TreeSet ts=new TreeSet(new Student());//亲木有这种写法</P>
  2. <P>//TreeSet ts=new TreeSet();//当然你也可以加上泛型解决安全隐患
  3. ts.add("lisi01",22);</P>
  4. <P>//ts.add(new Student("lisi01",90));
  5. ts.add("lisi02",20);
  6. ts.add("lisi04",19);
  7. ts.add("lisi03",19);
  8. </P>
复制代码
回复 使用道具 举报
  TreeSet ts=new TreeSet(new Student());
  ts.add("lisi01",22);
  ts.add("lisi02",20);
  ts.add("lisi04",19);
  ts.add("lisi03",19);
这个地方有问题
应该改成
  TreeSet ts=new TreeSet();
  ts.add(new Student("lisi01",22));
  ts.add(new Student("lisi02",20));
  ts.add(new Student("lisi04",19));
  ts.add(new Student("lisi03",19));

你可以看下API
TreeSet构造方法摘要
TreeSet()
          构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。
TreeSet(Collection<? extends E> c)
          构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序。
TreeSet(Comparator<? super E> comparator)
          构造一个新的空 TreeSet,它根据指定比较器进行排序。
TreeSet(SortedSet<E> s)
          构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。
你定义TreeSet ts=new TreeSet(new Student()); Java是无法识别的
同时TreeSet的add()方法
boolean add(E e)
          将指定的元素添加到此 set(如果该元素尚未存在于 set 中)。
你的add("lisi01",22)在TreeSet中也是无法识别的

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
package cn.itcast;
回复 使用道具 举报
TreeSet ts=new TreeSet(new Student());这句声明有问题应该这样TreeSet ts=new TreeSet<Student>();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马