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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘亚东 中级黑马   /  2014-7-3 17:39  /  1075 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果。

以下是我参考了一本书之后写的代码,但是最后没有出来预想的结果,请大家帮忙看看是哪里出了问题?

  1. <p>public class TreeSetTest {</p><p>
  2. public static void main(String[] args) {
  3.   TreeSet ss = new TreeSet(new Comparator()
  4.   {</p><p>//根据Student对象的score属性来决定大小
  5.    public int compare(Object o1,Object o2)
  6.    {
  7.     Student s1 = (Student)o1;
  8.     Student s2 = (Student)o2;
  9.     return s1.score > s2.score ? -1 : s1.score <= s2.score ? 1 : 0 ;
  10.    }
  11.   }
  12.   );
  13.   ss.add(new Student("张三",17,89));
  14.   ss.add(new Student("李四",19,85));
  15.   ss.add(new Student("王五",18,90));
  16.   ss.add(new Student("赵六",17,92));
  17.   ss.add(new Student("小明",18,90));
  18.   System.out.println(ss);
  19. }</p><p>}
  20. class Student{
  21. String name;
  22. int age;
  23. int score;
  24. public Student(String str, int i, int j) {
  25.   this.name = name;
  26.   this.age = age;
  27.   this.score = score;
  28. }
  29. public String toString(){
  30.   return "Student[name:"+name+",age:"+age+",score:"+score+"]";
  31. }
  32. </p><p>}
  33. </p><p> </p>
复制代码

先谢过大家了。

3 个回复

倒序浏览
package com.itcast.testlist;

import java.util.*;

public class TestError {

       
         public static void main(String[] args) {
                 TreeSet ss = new TreeSet(new Comparator() {
                   public int compare(Object o1,Object o2) {
                            Student s1 = (Student)o1;
                            Student s2 = (Student)o2;
                            //这里这样判断很不好,加入score相等的话,就要有次要条件比较,比如姓名和年龄。
                            //这里我将第二条件变为年龄,当然,当年龄相同时,你还可以判断姓名。
                            return s1.score > s2.score ? -1 : s1.score < s2.score ? 1 : Integer.valueOf(s1.age).compareTo(s2.age) ;
                   }
                  });
                 ss.add(new Student("张三",17,89));
                 ss.add(new Student("张一",16,89));//加入这个元素为了验证,当分数一样的时候,年龄越小顺序就在前面。
                 ss.add(new Student("李四",19,85));
                 ss.add(new Student("王五",18,90));
                 ss.add(new Student("赵六",17,92));
                 ss.add(new Student("小明",18,90));
                 System.out.println(ss);
         }
}         
         
class Student{
         String name;
         int age;
         int score;
         public Student(String name, int age, int score) {//你的代码中的形参写的不对应。
          this.name = name;
          this.age = age;
          this.score = score;
         }
         public String toString(){
          return "Student[name:"+name+",age:"+age+",score:"+score+"]";
         }
       
}
回复 使用道具 举报
跑步先生 发表于 2014-7-3 18:52
package com.itcast.testlist;

import java.util.*;

可是我这个打印出来的怎么都是哈希值?
回复 使用道具 举报
刘亚东 发表于 2014-7-5 11:33
可是我这个打印出来的怎么都是哈希值?

[Student[name:赵六,age:17,score:92], Student[name:王五,age:18,score:90], Student[name:张一,age:16,score:89], Student[name:张三,age:17,score:89], Student[name:李四,age:19,score:85]]
上面为我打印的结果啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马