求助:Treeset类中的简单问题!

FL1429 2007-10-17 08:39:33
程序如下:

import java.util.*;
class Person
{
private int javascore;
private String name;

Person(int j,String n)
{
this.javascore=j;
this.name=n;

}

public String toString()
{
return javascore+" "+name;
}
}

class Test
{
public static void main(String[] args)
{
Person p1=new Person(40,"Feng");
Person p2=new Person(90,"kaili");
Person p3=new Person(30,"zhanglian");
Person p4=new Person(80,"jay");

TreeSet ts=new TreeSet();
ts.add(p1);
ts.add(p2);
ts.add(p3);
ts.add(p4);

System.out.println(ts);
System.out.println();
}
}

问题:当我按如上代码运行时,出现如下错误:

D:\study\java\java\Treeset1>javac *.java

D:\study\java\java\Treeset1>java Test
Exception in thread "main" java.lang.ClassCastException
at java.util.TreeMap.compare(TreeMap.java:1085)
at java.util.TreeMap.put(TreeMap.java:463)
at java.util.TreeSet.add(TreeSet.java:209)
at Test.main(Treeset1.java:33)

D:\study\java\java\Treeset1>

但当我把ts.add(p2);
ts.add(p3);
ts.add(p4);都注释掉后,则程序能够运行!输出如下结果:
D:\study\java\java\Treeset1>javac *.java

D:\study\java\java\Treeset1>java Test
[40 Feng]

D:\study\java\java\Treeset1>

为什么会出现这样的结果?

顺便问一句,若实现按javascore成绩的升序排列,如何把 javascore的成绩提取出来进行比较?

(本人菜鸟,java刚入门,望高手指教!)


...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaoqifeng 2007-10-17
  • 打赏
  • 举报
回复
代码改下就行:

import java.util.*;


class Person implements java.lang.Comparable
{
private int javascore;
private String name;

Person(int j,String n)
{
this.javascore=j;
this.name=n;

}

public String toString()
{
return javascore+" "+name;
}

public int compareTo(Object obj) {
if (obj instanceof Person) {
Person std = (Person) obj;
if (this.name == std.name)
return 0;
if (this.javascore > std.javascore)
return 1;
}
return -1;
}
}

public class Test
{
public static void main(String[] args)
{
Person p1=new Person(40,"Feng");
Person p2=new Person(90,"kaili");
Person p3=new Person(30,"zhanglian");
Person p4=new Person(80,"jay");

TreeSet ts=new TreeSet();
ts.add(p1);
ts.add(p2);
ts.add(p3);
ts.add(p4);

System.out.println(ts);
System.out.println();
}
}
FL1429 2007-10-17
  • 打赏
  • 举报
回复
TreeSet中的对象不是自然排序吗!。。那要实现什么方法不?comparator()吗?
piaoqifeng 2007-10-17
  • 打赏
  • 举报
回复
TreeSet中的对象是要排序的
FL1429 2007-10-17
  • 打赏
  • 举报
回复
说明下:
上述附加问题是把输出结果按javascore的成绩升序排列,其中姓名也输出!
SDK版本:j2sdk1.4.2_13 程序在DOS控制台下运行!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧