本帖最后由 当我遇上你 于 2015-1-10 19:44 编辑
- public class Test2 {
- public static class Student
- {
-
- //定义成员变量
- double chinese;
- double math;
- double english;
- double sum;
- String name;
-
- //定义有参构造方法
- public Student(double chinese, double math, double english, double sum,
- String name)
- {
- this.chinese = chinese;
- this.math = math;
- this.english = english;
- this.sum = sum;
- this.name = name;
- }
-
- //覆盖原toString方法
- @Override
- public String toString()
- {
-
- //格式化输出格式,每个参数间隔2个制表符,成绩保留一位小数,为了不使受到名字长度的影响,名字格式化为12位,右对齐
- 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);
- }
-
- //主函数,程序入口
- public static void main(String[] args)throws Exception
- {
-
- //调用scanner从键盘读取信息
- Scanner scanner = new Scanner(System.in);
-
- //定义一个集合用于存储学生这个对象
- LinkedList<Student> linkedList = new LinkedList<Student>();
-
- //设置交互方式
- System.out.println("请按以下格式录入学生信息:name,30,30,30(姓名,语文,数学,外语)<输入时请用英文符号,输入完成后按回车键结束>:");
-
- //以下代码完成学生对象存储进集合的过程
- while(scanner.hasNextLine())
- {
-
- //每一行为一个学生的信息
- String str = scanner.nextLine();
-
- //设置程序结束方式
- if(str.equals(""))
- {
- break;
- }
-
- /*这里可以设置三个字符串数组,第一次用英文逗号分割存储进一个数组A,
- 然后再对含有中文逗号的进行分割存储进B,最后把两次分割后的所有元素存进数组C,用C数组执行后续步奏
- */
-
-
- //将程序按输入格式以逗号分割成4个参数(英文逗号),给相应形参赋初值
- String[] inf=str.split(",");
- String name1=inf[0];
- double chinese1=Double.parseDouble(inf[1]);
- double math1=Double.parseDouble(inf[2]);
- double english1=Double.parseDouble(inf[3]);
- double sum1=chinese1+math1+english1;
-
- //将含有学生信息的参数传递给新建的学生对象,由于在循环内部,每个回车键生成一个学生对象
- Student student = new Student(chinese1, math1, english1, sum1, name1);
- //将所有学生信息存储进集合
- linkedList.add(student);
- }
-
- //关闭输入流
- scanner.close();
-
- //调用重写的比较方法给集合由大到小排序
- Collections.sort(linkedList, new MyComparator());
-
- //对输出流进行重定向
- System.setOut(new PrintStream("stu.txt"));
-
- //打印表头
- System.out.println("\t姓名\t\t语文\t\t数学\t\t外语\t\t总分");
-
- //分别打印学生信息
- for(Student stu:linkedList)
- {
- System.out.println(stu.toString());
- }
- }
-
-
- //重写排序法
- public static class MyComparator implements Comparator<Student>
- {
- @Override
- public int compare(Student s1,Student s2)
- {
- if (s1.sum>s2.sum)
- {
- return (int) (s2.sum-s1.sum);
- } else if(s1.sum<s2.sum)
- {
- return (int) (s2.sum-s1.sum);
- }
- else return 0;
-
- }
- }
- }
- }
-
复制代码 忘记给题目了: 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,
写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),
然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
以上是我做测试时写的代码,由于每个人名长短不同,我通过格式化字符串长度可以右对齐,有什么好办法可以左对齐吗?代码精炼最好 |
|