本帖最后由 caobin 于 2015-1-7 15:55 编辑
应该看到有好几次这题,所以就拿来做一下,但是我想法好像不太一样啊,这样做行吗,会不会不符合题意啊。{:2_33:}先放结果
代码:- import java.io.*;
- import java.util.*;
- class Test
- {
- /*
- 需求:有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
- 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写
- 入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清
- 楚的看到学生的信息
-
- 思路:
- 1,获取键盘源
- 2,建立集合对象TreeSet
- 3,按照直观的格式写入文件
- */
- public static void main(String[] args)throws IOException
- {
- //创建流对象
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("stu.txt")));
- //创建集合对象
- TreeSet<Student> ts = new TreeSet<Student>();
- //读取数据
- String line = null;
- while((line = br.readLine())!=null)
- {
- //录入完毕
- if("over".equals(line))
- break;
- else
- {
- ts.add(new Student(line));
- }
- }
- System.out.println(ts);
- String format = "姓名\t语文\t数学\t英语";
- bw.write(format,0,format.length());
- bw.newLine();
- bw.flush();
- for(Student s : ts)
- {
- //格式一下
- String stu = s.toString().replaceAll(",","\t");
- bw.write(stu,0,stu.length());
- bw.newLine();
- bw.flush();
- }
- br.close();
- bw.close();
- }
- }
- class Student implements Comparable<Student>
- {
- private String info;
- public Student(String info)
- {
- this.info = info;
- }
- //返回从键盘录入的字符串
- public String toString()
- {
- return this.info;
- }
- //处理录入的数据,返回学生成绩做比较
- private int getScore()
- {
- String[] str = this.info.split(",");
- int score = Integer.parseInt(str[1])+Integer.parseInt(str[2])+Integer.parseInt(str[3]);
- return score;
- }
- //返回学生姓名
- private String getName()
- {
- String[] str = this.info.split(",");
- return str[0];
- }
- public int compareTo(Student s)
- {
- int num = s.getScore() - this.getScore();
- if(num==0)
- return this.getName().compareTo(s.getName());
- return num;
- }
- }
复制代码
至于异常处理我就不写了,做这样的题目写上异常处理也不利于代码阅读
|
|