虽然写出来的时候已经过了时间,不过还是发出来给大家看看吧,- package Library;
- /*
- 本题的主要难点在于
- 1、拒绝尾号不符合的学生
- 2、记录学生的进入次数
- 3、获得指定排名的学生
- 1、建立一个学生类包含三个字段,姓名、学号、进入次数
- 2、定义一个特殊比较器StuComp,实现按进出次数逆序排列并保证进出次数相同的人不会被删除
- 3、创建一个用StuComp做比较器的TreeSet。
- 4、把TreeSet和被禁止的id尾数传给记录函数
- 5、记录函数从输入中获得一个学生对象,并进行判断,
- 1、学生学号尾数是否为禁止尾数 输出错误
- 2、学生是否已经被记录
- 没有被记录则记录该学生,并把进入次数设置为1
- 已经存在,则把进入次数加1
- 6、返回集合
- 7、调用记录函数三次,每次传入不同的禁止ID尾数
- 8、第一题 只要返回所有记录
- 9、第二题,写一个返回集合中指定位置的元素的方法
- 10、后面几题和第二题相差不大
- */
- import java.util.Iterator;
- import java.util.Scanner;
- import java.util.TreeSet;
- /**
- * User: 秩宇
- * Date: 13-6-29
- * Time: 上午10:05
- */
- public class LibraryMain {
- public static void main(String[] args) {
- StuComp stc = new StuComp(); //比较器实例
- TreeSet<Student> rel = new TreeSet<Student>(stc); //TreeSet实例
- int testid = 2; //禁止进入的ID尾数
- rel = run(rel, testid);
- System.out.println("第一期完成");
- testid = 3;
- rel = run(rel, testid);
- System.out.println("第二期完成");
- testid = 6;
- rel = run(rel, testid);
- System.out.println("第三期完成");
- //第一问 所有人按进入次数排序
- System.out.println(rel);
- //第二问 第三名是谁
- System.out.println("进出次数排名第三的幸运儿是:");
- System.out.println(seach(rel, 2));
- //第三问 第二和第四名分别是谁,共进出几次
- Student stu4 = seach(rel, 1);
- Student stu5 = seach(rel, 3);
- System.out.println("第二和第四名分别为:");
- System.out.println(stu4);
- System.out.println(stu5);
- System.out.println("两人总进出次数是 :");
- System.out.println(stu4.Times + stu5.Times);
- //第四问 总进出次数是多少
- System.out.println("总的进出次数是");
- int sum = 0;
- Iterator it = rel.iterator();
- while (it.hasNext()) {
- Student st = (Student) it.next();
- sum = sum + st.Times;
- }
- System.out.println(sum);
- }
- //返回集合中指定位置的元素
- public static Student seach(TreeSet ts, int i) {
- Iterator it = ts.iterator();
- int index = 0;
- while (it.hasNext()) {
- Student stuTemp = (Student) it.next();
- if (index == i) {
- return stuTemp;
- }
- index++;
- }
- return null;
- }
- //记录学生进出次数
- private static TreeSet<Student> run(TreeSet<Student> rel, int testid) {
- for (int i = 0; i < 10; i++) {
- Student stu = input();
- if (testID(stu, testid)) { //检查是否为禁止学号
- System.out.println("位置紧张,该学号被禁止!");
- i -= i;
- } else if (!is(rel, stu)) { //测试集合中是否存在该学生,不存在就加入集合
- rel.add(stu);
- } else if (is(rel, stu)) { //如果该学生就把该的进出次数加1
- addTimes(rel, stu);
- }
- }
- return rel;
- }
- //测试是否为禁止ID
- public static boolean testID(Student stu, int id) {
- String temp = String.valueOf(stu.ID);
- int i = Integer.valueOf(temp.substring(temp.length() - 1, temp.length()));
- return i == id;
- }
- //集合中是否存在传入的元素
- public static boolean is(TreeSet<Student> tc, Student stu) {
- Iterator it = tc.iterator();
- while (it.hasNext()) {
- if (((Student) it.next()).ID == stu.ID) {
- return true;
- }
- }
- return false;
- }
- //增加进出次数
- public static void addTimes(TreeSet<Student> tc, Student stu) {
- Iterator it = tc.iterator();
- while (it.hasNext()) {
- Student stu1 = ((Student) it.next());
- if (stu1.ID == stu.ID) {
- stu1.Times = stu1.Times + 1;
- }
- }
- }
- //录入数据
- public static Student input() {
- System.out.println("请输入姓名:");
- Scanner in = new Scanner(System.in);
- String name = in.next();
- System.out.println("请输入学号:");
- int ID = (Integer.valueOf(in.next()));
- Student student1 = new Student(name, ID, 1);
- return student1;
- }
- }
复制代码 Student类- package Library;
- /**
- * User: 秩宇
- * Date: 13-6-29
- * Time: 上午9:46
- */
- public class Student {
- String Name;
- int ID;
- int Times;
- public Student(String name, int ID,int times) {
- Name = name;
- this.ID = ID;
- Times = times ;
- }
- //重写输出方法
- @Override
- public String toString(){
- String rel = "姓名:"+this.Name+" "+"学号:"+this.ID+" "+"进出次数:"+this.Times+"\n";
- return rel;
- }
- }
复制代码 比较器- package Library;
- import java.util.Comparator;
- /**
- * User: 秩宇
- * Date: 13-6-29
- * Time: 上午9:48
- */
- public class StuComp implements Comparator<Student> {
- @Override
- public int compare(Student o1, Student o2) {
- int x = o1.Times;
- int y = o2.Times;
- if (x > y) {
- return -1; //实现逆序排列
- } else if (x == y) {
- return-1; //防止进出次数相同的人被删除
- } else {
- return 1;
- }
- }
- }
复制代码 |