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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 当我遇上你 中级黑马   /  2015-1-10 19:31  /  752 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 当我遇上你 于 2015-1-10 19:44 编辑
  1. public class Test2 {

  2.         public static  class Student
  3.         {
  4.                
  5.                 //定义成员变量
  6.                 double chinese;
  7.                 double math;
  8.                 double english;
  9.                 double sum;
  10.             String name;
  11.                
  12.             //定义有参构造方法
  13.             public Student(double chinese, double math, double english, double sum,
  14.                                 String name)
  15.                 {
  16.                         this.chinese = chinese;
  17.                         this.math = math;
  18.                         this.english = english;
  19.                         this.sum = sum;
  20.                         this.name = name;
  21.                 }
  22.                
  23.             //覆盖原toString方法
  24.             @Override
  25.                 public String toString()
  26.                 {
  27.                         
  28.                     //格式化输出格式,每个参数间隔2个制表符,成绩保留一位小数,为了不使受到名字长度的影响,名字格式化为12位,右对齐
  29.                     return String.format("%12s\t\t%2$.1f\t\t%3$.1f\t\t%4.1f\t\t%5$.1f", name,chinese,math,english,sum);
  30.                 }
  31.                
  32.             //主函数,程序入口
  33.             public static void main(String[] args)throws Exception
  34.                 {
  35.                         
  36.                     //调用scanner从键盘读取信息
  37.                     Scanner scanner = new Scanner(System.in);
  38.                         
  39.                     //定义一个集合用于存储学生这个对象
  40.                     LinkedList<Student> linkedList = new LinkedList<Student>();
  41.                         
  42.                     //设置交互方式
  43.                     System.out.println("请按以下格式录入学生信息:name,30,30,30(姓名,语文,数学,外语)<输入时请用英文符号,输入完成后按回车键结束>:");
  44.                         
  45.                     //以下代码完成学生对象存储进集合的过程
  46.                     while(scanner.hasNextLine())
  47.                         {
  48.                                 
  49.                             //每一行为一个学生的信息
  50.                             String str = scanner.nextLine();
  51.                                 
  52.                             //设置程序结束方式
  53.                             if(str.equals(""))
  54.                                 {
  55.                                         break;
  56.                                 }
  57.                                 
  58.                             /*这里可以设置三个字符串数组,第一次用英文逗号分割存储进一个数组A,
  59.                              然后再对含有中文逗号的进行分割存储进B,最后把两次分割后的所有元素存进数组C,用C数组执行后续步奏
  60.                              */
  61.                            
  62.                            
  63.                             //将程序按输入格式以逗号分割成4个参数(英文逗号),给相应形参赋初值
  64.                             String[] inf=str.split(",");
  65.                                 String name1=inf[0];
  66.                                 double chinese1=Double.parseDouble(inf[1]);
  67.                                 double math1=Double.parseDouble(inf[2]);
  68.                                 double english1=Double.parseDouble(inf[3]);
  69.                                 double sum1=chinese1+math1+english1;
  70.                                 
  71.                                 //将含有学生信息的参数传递给新建的学生对象,由于在循环内部,每个回车键生成一个学生对象
  72.                                 Student student = new Student(chinese1, math1, english1, sum1, name1);

  73.                                 //将所有学生信息存储进集合
  74.                                 linkedList.add(student);
  75.                         }
  76.                         
  77.                     //关闭输入流
  78.                     scanner.close();
  79.                         
  80.                         //调用重写的比较方法给集合由大到小排序
  81.                     Collections.sort(linkedList, new MyComparator());
  82.                         
  83.                     //对输出流进行重定向
  84.                     System.setOut(new PrintStream("stu.txt"));
  85.                         
  86.                     //打印表头
  87.                     System.out.println("\t姓名\t\t语文\t\t数学\t\t外语\t\t总分");
  88.                         
  89.                     //分别打印学生信息
  90.                     for(Student stu:linkedList)
  91.                         {
  92.                                 System.out.println(stu.toString());
  93.                         }
  94.                 }
  95.                
  96.                
  97.             //重写排序法
  98.             public static class MyComparator implements Comparator<Student>
  99.                 {
  100.                         @Override
  101.                         public int compare(Student s1,Student s2)
  102.                         {
  103.                                 if (s1.sum>s2.sum)
  104.                                 {
  105.                                         return (int) (s2.sum-s1.sum);
  106.                                 } else if(s1.sum<s2.sum)
  107.                                 {
  108.                                         return (int) (s2.sum-s1.sum);
  109.                                 }
  110.                                 else return 0;
  111.                                 
  112.                         }
  113.                 }
  114.         }
  115. }
  116.                
复制代码
忘记给题目了: 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,
         写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),
         然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。

以上是我做测试时写的代码,由于每个人名长短不同,我通过格式化字符串长度可以右对齐,有什么好办法可以左对齐吗?代码精炼最好

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马