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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

秩宇

中级黑马

  • 黑马币:0

  • 帖子:41

  • 精华:0

© 秩宇 中级黑马   /  2013-6-30 13:56  /  1435 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

虽然写出来的时候已经过了时间,不过还是发出来给大家看看吧,
  1. package Library;

  2. /*

  3. 本题的主要难点在于
  4. 1、拒绝尾号不符合的学生
  5. 2、记录学生的进入次数
  6. 3、获得指定排名的学生

  7.   1、建立一个学生类包含三个字段,姓名、学号、进入次数
  8.   2、定义一个特殊比较器StuComp,实现按进出次数逆序排列并保证进出次数相同的人不会被删除
  9.   3、创建一个用StuComp做比较器的TreeSet。
  10.   4、把TreeSet和被禁止的id尾数传给记录函数
  11.   5、记录函数从输入中获得一个学生对象,并进行判断,
  12.       1、学生学号尾数是否为禁止尾数   输出错误
  13.       2、学生是否已经被记录
  14.               没有被记录则记录该学生,并把进入次数设置为1
  15.               已经存在,则把进入次数加1
  16.   6、返回集合
  17.   7、调用记录函数三次,每次传入不同的禁止ID尾数
  18.   8、第一题 只要返回所有记录
  19.   9、第二题,写一个返回集合中指定位置的元素的方法
  20.   10、后面几题和第二题相差不大

  21. */

  22. import java.util.Iterator;
  23. import java.util.Scanner;
  24. import java.util.TreeSet;

  25. /**
  26. * User: 秩宇
  27. * Date: 13-6-29
  28. * Time: 上午10:05
  29. */
  30. public class LibraryMain {
  31.     public static void main(String[] args) {

  32.         StuComp stc = new StuComp();       //比较器实例
  33.         TreeSet<Student> rel = new TreeSet<Student>(stc); //TreeSet实例
  34.         int testid = 2;                                   //禁止进入的ID尾数
  35.         rel = run(rel, testid);
  36.         System.out.println("第一期完成");
  37.         testid = 3;
  38.         rel = run(rel, testid);
  39.         System.out.println("第二期完成");
  40.         testid = 6;
  41.         rel = run(rel, testid);
  42.         System.out.println("第三期完成");

  43.         //第一问  所有人按进入次数排序
  44.         System.out.println(rel);

  45.         //第二问 第三名是谁
  46.         System.out.println("进出次数排名第三的幸运儿是:");
  47.         System.out.println(seach(rel, 2));

  48.         //第三问  第二和第四名分别是谁,共进出几次
  49.         Student stu4 = seach(rel, 1);
  50.         Student stu5 = seach(rel, 3);
  51.         System.out.println("第二和第四名分别为:");
  52.         System.out.println(stu4);
  53.         System.out.println(stu5);
  54.         System.out.println("两人总进出次数是 :");
  55.         System.out.println(stu4.Times + stu5.Times);

  56.         //第四问  总进出次数是多少
  57.         System.out.println("总的进出次数是");
  58.         int sum = 0;
  59.         Iterator it = rel.iterator();
  60.         while (it.hasNext()) {
  61.             Student st = (Student) it.next();
  62.             sum = sum + st.Times;
  63.         }
  64.         System.out.println(sum);


  65.     }

  66.     //返回集合中指定位置的元素
  67.     public static Student seach(TreeSet ts, int i) {
  68.         Iterator it = ts.iterator();
  69.         int index = 0;
  70.         while (it.hasNext()) {
  71.             Student stuTemp = (Student) it.next();
  72.             if (index == i) {
  73.                 return stuTemp;
  74.             }
  75.             index++;
  76.         }
  77.         return null;
  78.     }

  79.     //记录学生进出次数
  80.     private static TreeSet<Student> run(TreeSet<Student> rel, int testid) {
  81.         for (int i = 0; i < 10; i++) {
  82.             Student stu = input();
  83.             if (testID(stu, testid)) {                            //检查是否为禁止学号
  84.                 System.out.println("位置紧张,该学号被禁止!");
  85.                 i -= i;
  86.             } else if (!is(rel, stu)) {                           //测试集合中是否存在该学生,不存在就加入集合
  87.                 rel.add(stu);
  88.             } else if (is(rel, stu)) {                            //如果该学生就把该的进出次数加1
  89.                 addTimes(rel, stu);
  90.             }
  91.         }
  92.         return rel;
  93.     }

  94.     //测试是否为禁止ID
  95.     public static boolean testID(Student stu, int id) {
  96.         String temp = String.valueOf(stu.ID);
  97.         int i = Integer.valueOf(temp.substring(temp.length() - 1, temp.length()));
  98.         return i == id;

  99.     }

  100.     //集合中是否存在传入的元素
  101.     public static boolean is(TreeSet<Student> tc, Student stu) {
  102.         Iterator it = tc.iterator();
  103.         while (it.hasNext()) {
  104.             if (((Student) it.next()).ID == stu.ID) {
  105.                 return true;
  106.             }
  107.         }
  108.         return false;
  109.     }

  110.     //增加进出次数
  111.     public static void addTimes(TreeSet<Student> tc, Student stu) {
  112.         Iterator it = tc.iterator();
  113.         while (it.hasNext()) {
  114.             Student stu1 = ((Student) it.next());
  115.             if (stu1.ID == stu.ID) {
  116.                 stu1.Times = stu1.Times + 1;
  117.             }
  118.         }
  119.     }

  120.     //录入数据
  121.     public static Student input() {
  122.         System.out.println("请输入姓名:");
  123.         Scanner in = new Scanner(System.in);
  124.         String name = in.next();
  125.         System.out.println("请输入学号:");
  126.         int ID = (Integer.valueOf(in.next()));
  127.         Student student1 = new Student(name, ID, 1);
  128.         return student1;


  129.     }

  130. }
复制代码
Student类
  1. package Library;

  2. /**
  3. * User: 秩宇
  4. * Date: 13-6-29
  5. * Time: 上午9:46
  6. */
  7. public class Student {
  8.     String Name;
  9.     int ID;
  10.     int Times;

  11.     public Student(String name, int ID,int times) {
  12.         Name = name;
  13.         this.ID = ID;
  14.         Times = times ;

  15.     }
  16.        //重写输出方法
  17.     @Override
  18.     public  String toString(){
  19.         String rel = "姓名:"+this.Name+"  "+"学号:"+this.ID+"  "+"进出次数:"+this.Times+"\n";
  20.         return rel;
  21.     }
  22. }
复制代码
比较器
  1. package Library;

  2. import java.util.Comparator;

  3. /**
  4. * User: 秩宇
  5. * Date: 13-6-29
  6. * Time: 上午9:48
  7. */
  8. public class StuComp implements Comparator<Student> {

  9.     @Override
  10.     public int compare(Student o1, Student o2) {
  11.         int x = o1.Times;
  12.         int y = o2.Times;
  13.         if (x > y) {
  14.             return -1;             //实现逆序排列
  15.         } else if (x == y) {
  16.             return-1;              //防止进出次数相同的人被删除
  17.         } else {
  18.             return 1;
  19.         }
  20.     }
  21. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
夜默 + 2

查看全部评分

2 个回复

正序浏览
秩宇 发表于 2013-6-30 13:58
题虽然做出来了,但是和公布的答案相比还是有很多不足,比如某些错误没有输出提示,比如没有体现面向对象思 ...

楼主不错啊,学习下
回复 使用道具 举报
题虽然做出来了,但是和公布的答案相比还是有很多不足,比如某些错误没有输出提示,比如没有体现面向对象思想等等,不过还是发出来给大家看看,希望大家共同进步。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马