黑马程序员技术交流社区

标题: TreeSet排序的一个练习 [打印本页]

作者: xwh1230    时间: 2014-7-21 22:23
标题: TreeSet排序的一个练习
键盘输入 姓名和考试成绩
连续输入n个  
输入完毕后,显示输入的结果,按照成绩排序

思路:
1.输入姓名和成绩需要使用Scanner类,并且定义一个Student类
2.连续输入n个,使用循环,要有结束标志
3.把输入的字符串转成 name score属性的值,存入set集合
4.定义比较器按照成绩排序,迭代取出集合内的对象

package cn.itcast.treeset;

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class TreeSetTest {
public static void main(String[] args) {
  TreeSet ts = new TreeSet(new StudentComparator());
  ts = getStudent();
  
  Iterator it = ts.iterator();
  while(it.hasNext()){
   Student s = it.next();
   System.out.println(s);
  }
}
//定义一个方法从键盘获取字符串,转换成为Student对象
public static TreeSet getStudent(){
  TreeSet ts = new TreeSet(new StudentComparator());
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入姓名,分数:");
  while(true){
   String s = sc.nextLine();
   //首先判断条件被我写成 s.trim()=="";讽刺啊,==判断的是两个的地址值。。。,至少也应该写成s.equals("");
   if(s.isEmpty())
    break;
   String[] st = s.trim().split(" +");
   Student student = new Student();
   student.setName(st[0]);
   student.setScore(Integer.parseInt(st[1]));
   ts.add(student);
//   System.out.println("请输入姓名,分数:");
  }
  System.out.println("结束输入!");
  return ts;
}

}



另外:比较器的代码如下:

public class StudentComparator implements Comparator{
public int compare(Student s1,Student s2){
//  int num = s1.getName().compareTo(s2.getName());
//  return 0==num?s1.getScore()-s2.getScore():num;
  int num = s1.getScore()-s2.getScore();
  return 0==num?s1.getName().compareTo(s2.getName()):num;
}
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2