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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 官珺伟 高级黑马   /  2014-2-27 10:32  /  1752 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编程问题:
10、 声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。

评分

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

查看全部评分

8 个回复

倒序浏览
- -我擦你直接把入学测试题拿出来了,我给你说方法吧,Student在实现comparable借口,覆盖comparaTo方法,在方法中来搞起要比较的数据,然后存入TreeSet.

评分

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

查看全部评分

回复 使用道具 举报
一年_Hei 来自手机 中级黑马 2014-2-27 10:35:55
藤椅
有两种做法,让学生对象实现comparable接口,或者让TreeSet集合实现comparator接口
回复 使用道具 举报
啥也不说了。。。
  1. package com.itheima;

  2. import java.util.TreeSet;

  3. /*
  4. * 10、 声明类Student,包含3个成员变量:name、age、score,
  5. * 创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
  6. */

  7. class Student2 implements Comparable<Student2>{
  8.         private String name;
  9.         private int age;
  10.         private int score;
  11.         public Student2(String name, int age, int score) {
  12.                 this.name = name;
  13.                 this.age = age;
  14.                 this.score = score;
  15.         }
  16.        
  17.         @Override
  18.         /*判断两个对象相同的条件*/
  19.         public boolean equals(Object obj) {
  20.                 // TODO Auto-generated method stub
  21.                 Student2 s = null;
  22.                 if(obj instanceof Student2)
  23.                         s = (Student2)obj;
  24.                 else
  25.                         return false;
  26.                 return name.equals(s.name) && (age == s.age) && (score == s.score);
  27.         }
  28.        
  29.         @Override
  30.         /*若分数相同,则以名字来排序*/
  31.         public int compareTo(Student2 o) {
  32.                 // TODO Auto-generated method stub
  33.                 int temp = 0;
  34.                 if(0 == (temp = new Integer(score).compareTo(o.score))){
  35.                         return name.compareTo(o.name);
  36.                 }
  37.                 else
  38.                         return temp;
  39.         }
  40.        
  41.         @Override
  42.         public String toString() {
  43.                 // TODO Auto-generated method stub
  44.                 return score + " " + name + " " + age;
  45.         }
  46. }

  47. public class test10 {

  48.         public static void main(String[] args) {
  49.                 /*定义五个Student2对象*/
  50.                 Student2 s1 = new Student2("zhangsan", 22, 90);
  51.                 Student2 s2 = new Student2("lisi", 18, 100);
  52.                 Student2 s3 = new Student2("wangwu", 23, 90);
  53.                 Student2 s4 = new Student2("zhaoliu", 30, 90);
  54.                 Student2 s5 = new Student2("tianqi", 21, 70);

  55.                 /*将对象放入TreeSet*/
  56.                 TreeSet<Student2> ts = new TreeSet<Student2>();
  57.                 ts.add(s1);
  58.                 ts.add(s2);
  59.                 ts.add(s3);
  60.                 ts.add(s4);
  61.                 ts.add(s5);
  62.                
  63.                 /*打印集合*/
  64.                 printTreeSet(ts);
  65.         }

  66.         private static void printTreeSet(TreeSet<Student2> ts) {
  67.                 // TODO Auto-generated method stub
  68.                 for(Student2 s : ts){
  69.                         System.out.println(s.toString());
  70.                 }
  71.         }

  72. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
李白衣 发表于 2014-2-27 10:37
啥也不说了。。。

如果按分数从高到低,怎么做呢?

点评

e.c
比较的时候,把对象反一下。  发表于 2014-2-27 11:32
回复 使用道具 举报
  1. import java.util.Comparator;
  2. import java.util.Iterator;
  3. import java.util.TreeSet;

  4. public class Test2 {

  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub

  7.                 TreeSet<Student> ts=new TreeSet<Student>(new MyComp());
  8.                 ts.add(new Student("张三",21, 56));
  9.                 ts.add(new Student("王五",22, 57));
  10.                 ts.add(new Student("李四",23, 55));
  11.                 ts.add(new Student("赵六",24, 53));
  12.                 ts.add(new Student("马斯",25, 50));
  13.                
  14.                
  15.                
  16.                 for(Iterator<Student> set=ts.iterator();set.hasNext();)
  17.                 {
  18.                         Student stu=set.next();
  19.                         System.out.println(stu.getName()+"..."+stu.getScore());
  20.                 }
  21.                        
  22.         }

  23. }

  24. class Student{
  25.         private String name;
  26.         private int age;
  27.         private int score;
  28.         public Student(String name, int age, int score) {
  29.                 this.name = name;
  30.                 this.age = age;
  31.                 this.score = score;
  32.         }
  33.         public String getName() {
  34.                 return name;
  35.         }
  36.         public void setName(String name) {
  37.                 this.name = name;
  38.         }
  39.         public int getAge() {
  40.                 return age;
  41.         }
  42.         public void setAge(int age) {
  43.                 this.age = age;
  44.         }
  45.         public int getScore() {
  46.                 return score;
  47.         }
  48.         public void setScore(int score) {
  49.                 this.score = score;
  50.         }
  51.         @Override
  52.         public boolean equals(Object arg0) {
  53.                 // TODO Auto-generated method stub
  54.                 if(!(arg0 instanceof Student))
  55.                         throw new ClassCastException("不是student类型");
  56.                 Student stu=(Student)arg0;
  57.                 return this.name.equals(stu.name)&&this.age==stu.age&&this.score==stu.score;
  58.         }
  59.         @Override
  60.         public int hashCode() {
  61.                 // TODO Auto-generated method stub
  62.                 return this.name.hashCode()+this.age*13;
  63.         }
  64.         @Override
  65.         public String toString() {
  66.                 // TODO Auto-generated method stub
  67.                 return "姓名:"+this.name+" 年龄:"+this.age+" 得分:"+this.score;
  68.         }
  69. }

  70. class MyComp implements Comparator<Student>{

  71.         @Override
  72.         public int compare(Student arg0, Student arg1) {
  73.                 // TODO Auto-generated method stub

  74.                         return new Integer(arg0.getScore()).compareTo(arg1.getScore());//从低到高
复制代码


QQ图片20140227145516.jpg (17.1 KB, 下载次数: 28)

从低到高

从低到高

2.jpg (12.29 KB, 下载次数: 43)

2.jpg

评分

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

查看全部评分

回复 使用道具 举报
package com.itheima;

import java.util.TreeSet;

/*
* 10、 声明类Student,包含3个成员变量:name、age、score,
* 创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
*/

class Student2 implements Comparable<Student2>{
        private String name;
        private int age;
        private int score;
        public Student2(String name, int age, int score) {
                this.name = name;
                this.age = age;
                this.score = score;
        }
        
        @Override
        /*判断两个对象相同的条件*/
        public boolean equals(Object obj) {
                // TODO Auto-generated method stub
                Student2 s = null;
                if(obj instanceof Student2)
                        s = (Student2)obj;
                else
                        return false;
                return name.equals(s.name) && (age == s.age) && (score == s.score);
        }
        
        @Override
        /*若分数相同,则以名字来排序*/
        public int compareTo(Student2 o) {
                // TODO Auto-generated method stub
                int temp = 0;
                if(0 == (temp = new Integer(score).compareTo(o.score))){
                        return name.compareTo(o.name);
                }
                else
                        return temp;
        }
        
        @Override
        public String toString() {
                // TODO Auto-generated method stub
                return score + " " + name + " " + age;
        }
}

public class test10 {

        public static void main(String[] args) {
                /*定义五个Student2对象*/
                Student2 s1 = new Student2("zhangsan", 22, 90);
                Student2 s2 = new Student2("lisi", 18, 100);
                Student2 s3 = new Student2("wangwu", 23, 90);
                Student2 s4 = new Student2("zhaoliu", 30, 90);
                Student2 s5 = new Student2("tianqi", 21, 70);

                /*将对象放入TreeSet*/
                TreeSet<Student2> ts = new TreeSet<Student2>();
                ts.add(s1);
                ts.add(s2);
                ts.add(s3);
                ts.add(s4);
                ts.add(s5);
               
                /*打印集合*/
                printTreeSet(ts);
        }

        private static void printTreeSet(TreeSet<Student2> ts) {
                // TODO Auto-generated method stub
                for(Student2 s : ts){
                        System.out.println(s.toString());
                }
        }

}
回复 使用道具 举报

没有考虑成绩相同的情况
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马