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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-9-2 14:41  /  572 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

sf
  1. package test_treeSet;

  2. import java.util.Comparator;
  3. import java.util.Scanner;
  4. import java.util.TreeSet;

  5. public class StudentDemo {

  6.         /**
  7.          * 键盘录入3个学生成绩,按总分高低输出
  8.          */
  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                 //建立TreeSet集合,可自定义比较器,保证元素唯一和排序
  12.                 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>(){
  13.                         @Override
  14.                         public int compare(Student s1, Student s2) {
  15. //                                int result = (int)(s1.getTotal() - s2.getTotal());//学生总分比较
  16.                                 int result = (int)(s1.getAverage() - s2.getAverage());//平均分排序
  17.                                 result = (int)(result==0?s1.getChinese()-s2.getChinese():result);
  18.                                 result = (int)(result==0?s1.getMath()-s2.getMath():result);
  19.                                 result = (int)(result==0?s1.getEnglish()-s2.getEnglish():result);
  20.                                 if(result==0){
  21.                                         result = s1.getName().compareTo(s2.getName());
  22.                                 }
  23.                                 return result;
  24.                         }
  25.                 });
  26.                 for (int i = 1; i < 4; i++) {
  27.                         System.out.println("请输入第"+i+"个学生的成绩,格式为:姓名 语文 数学 英语:");
  28.                         String str = new Scanner(System.in).nextLine();
  29.                         String[] s = str.split("\\s+");//正则表达式切割字符串 至少一个空格
  30.                         Student s1 = new Student(s[0],Double.parseDouble(s[1]), Double.parseDouble(s[2]),
  31.                                                                                                         Double.parseDouble(s[3]));
  32.                         ts.add(s1);
  33.                 }
  34.                 //遍历输出学生信息
  35.                 System.out.println("姓名\t语文\t数学\t英语\t总分\t平均分");
  36.                 for(Student s:ts){
  37.                         System.out.println(s.getName()+"\t"+s.getChinese()+"\t"+s.getMath()+
  38.                                                                         "\t"+s.getEnglish()+"\t"+s.getTotal()+"\t"+s.getAverage());
  39.                 }
  40.         }

  41. }
  42. package test_treeSet;
  43. /**
  44. * 创建学生类,包含姓名,语文、数学、英文成绩
  45. * */
  46. public class Student {
  47.         private String name;
  48.         private double chinese;
  49.         private double math;
  50.         private double english;
  51.         public String getName() {
  52.                 return name;
  53.         }
  54.        
  55.         public Student(String name, double chinese, double math, double english) {
  56.                 super();
  57.                 this.name = name;
  58.                 this.chinese = chinese;
  59.                 this.math = math;
  60.                 this.english = english;
  61.         }
  62.        
  63.         public void setName(String name) {
  64.                 this.name = name;
  65.         }
  66.        
  67.         public double getChinese() {
  68.                 return chinese;
  69.         }
  70.        
  71.         public void setChinese(double chinese) {
  72.                 this.chinese = chinese;
  73.         }
  74.        
  75.         public double getMath() {
  76.                 return math;
  77.         }
  78.        
  79.         public void setMath(double math) {
  80.                 this.math = math;
  81.         }
  82.        
  83.         public double getEnglish() {
  84.                 return english;
  85.         }
  86.        
  87.         public void setEnglish(double english) {
  88.                 this.english = english;
  89.         }
  90.         //获取总分数
  91.         public double getTotal(){
  92.                 return chinese + math + english ;
  93.         }
  94.         //获取平均分
  95.         public double getAverage(){
  96.                 return this.getTotal()/3;
  97.         }
  98. }
复制代码


7 个回复

倒序浏览
运行结果
请输入第1个学生的成绩,格式为:姓名 语文 数学 英语:
ads 89  88   8
请输入第2个学生的成绩,格式为:姓名 语文 数学 英语:
fds 87 76 78
请输入第3个学生的成绩,格式为:姓名 语文 数学 英语:
fs 99 88 77
姓名        语文        数学        英语        总分        平均分
ads        89.0        88.0        8.0        185.0        61.666666666666664
fds        87.0        76.0        78.0        241.0        80.33333333333333
fs        99.0        88.0        77.0        264.0        88.0
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-9-2 15:29:32
藤椅
平均分这么长真的好么
回复 使用道具 举报
asinzuo 发表于 2015-9-2 15:29
平均分这么长真的好么

没办法 不会设定输出格式
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-9-2 16:34:42
报纸
fmi110 发表于 2015-9-2 15:36
没办法 不会设定输出格式

分数为啥一定用double呢,你看你即使用了double,也没给出个80.5分啊92.3啥的有小数的分数,{:3_51:}{:3_65:}{:3_69:}{:3_56:}{:3_68:}
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-9-2 16:35:59
地板
system.out.printf
回复 使用道具 举报
好长的代码、、
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-9-2 16:44:17
8#
//获取平均分
        public double getAverage(){
                return this.getTotal()/3;
        }

在this.getTotal()/3;前面加个int也行
(int)this.getTotal()/3;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马