本帖最后由 cc19930915 于 2016-5-10 00:15 编辑
Test4--有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
如果有更好的解决方式,你可以发出来提供参考。
PS:学生类没有写。
- public static void main(String[] args) {
- //创建集合对象 传入比较器
- TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
- //重写compara方法
- @Override
- public int compare(Student o2, Student o1) {
- int num = o1.getSum() - o2.getSum();
- num = num == 0 ? o1.getChinese() - o2.getChinese() : num;
- num = num == 0 ? o1.getMath() - o2.getMath() : num;
- num = num == 0 ? o1.getEnglish() - o2.getEnglish() : num;
- num = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
- return num;
- }
- });
- //创建键盘录入对象
- Scanner sc = new Scanner(System.in);
- //信息提示
- System.out.println("|请输入学生信息,输入格式为:name,30,30,30(姓名,三门课成绩)|");
- System.out.println("| 注意:输入格式中的,为英文逗号,输入中文逗号无效,仅限添加五个成绩|");
- //判断集合元素个数是否不等于5
- while(set.size() != 5){
- //录入字符串
- String line = sc.nextLine();
- //调用添加信息方法
- addMessage(line,set);
- }
- //存储学生对象到指定文件
- storeFile(set);
- }
- /*
- * 存储集合元素
- */
- private static void storeFile(TreeSet<Student> set) {
- PrintStream ps = null;
- //捕获异常
- try {
- //创建打印流对象
- ps = new PrintStream(new FileOutputStream("stu.txt"),true);
- //获取迭代器
- Iterator<Student> it = set.iterator();
- //循环判断
- while(it.hasNext()){
- //将对象写到文本文件中
- ps.println(it.next());
- }
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- //释放资源
- ps.close();
- }
- }
- /*
- * 添加学生信息
- */
- public static void addMessage(String str,TreeSet<Student> tree){
- //声明姓名变量
- String name;
- //声明语文数学英语三个变量
- int chinese,math,english;
- //通过逗号分隔字符串
- String[] arr = str.split(",");
- //判断字符串数组的元素个数是否为4
- if(arr.length != 4){
- //不是4,那么就告知输入错误
- System.out.println("学生信息录入错误,请重新输入");
- //结束该方法
- return;
- //继续判断数组的元素是否有为空的
- }else if(arr[0] == "" || arr[1] == "" || arr[2] == "" || arr[3] == ""){
- //如果为为空的话,输出信息录入错误
- System.out.println("学生信息录入错误,请重新输入");
- //结束该方法
- return;
- }
- //捕获异常
- try {
- //将数组索引1的值赋给chinese
- chinese = Integer.parseInt(arr[1]);
- //将数组索引2的值赋给math
- math = Integer.parseInt(arr[2]);
- //将数组索引3的值赋给english
- english = Integer.parseInt(arr[3]);
- //添加学生对象
- tree.add(new Student(arr[0], chinese, math, english));
- //添加成功 信息提示
- System.out.println("您已成功添加,添加的信息为:" + "name:" + arr[0] + " chinese:" + chinese + " math:" + math + " english:" + english);
- } catch (NumberFormatException e) {
- //如果捕获到异常就信息提示
- System.out.println("学生信息中的成绩请用数字输入");
- //除了数字类型转换异常以外,可能还有其他的异常,所以再添加一个Exception
- }catch(Exception e){
- System.out.println("学生信息录入错误,请重新输入");
- }
- }
- }
复制代码
|