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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chensheng06 中级黑马   /  2015-8-30 00:41  /  778 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
import java.util.Iterator;
import java.util.TreeSet;





/*
* Test4--有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
* 输入格式为:name,30,30,30(姓名,三门课成绩),
* 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
* 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
*
* 思路:
* 1.定义一个描述学生的类,里面包含姓名,各门课成绩。并且让该类具备比较性,要实现Comparable接口。
* 2.定义一个输入流,从键盘接收字符。
* 3.因为要用到总成绩的排序,所以使用到TreeSet集合。
* 4.将学生封装成对象,安装总成绩的排序放入TreeSet集合中。
* 5,定义一个输出流对象,从集合中读取数据,并将其存入到指定的文件中。
* */
public class Test4 {

        public static void main(String[] args) {
                stuCompare();
        }
        public static void stuCompare(){
                BufferedReader bufr = null;
                BufferedWriter bufw = null;
                try {
                        bufr = new BufferedReader(new InputStreamReader(System.in));
                        bufw = new BufferedWriter(new FileWriter("stu.txt"));
                        TreeSet<Student> ts = new TreeSet<Student>();
                        String line = null;
                        while((line = bufr.readLine())!=null){
                                if("over".equals(line))
                                        break;
                                String[] str = line.split(",");
                                ts.add(new Student(str[0],Integer.parseInt(str[1]),
                                                Integer.parseInt(str[2]),Integer.parseInt(str[3])));
                                //str = null;
                        }
                        Iterator it = ts.iterator();
                        while(it.hasNext()){
                                Student stu = (Student) it.next();
                                bufw.write(stu.getName()+","+String.valueOf(stu.getCn())
                                                        +","+String.valueOf(stu.getMa())+","
                                                        +String.valueOf(stu.getEn()));
                                bufw.newLine();
                                bufw.flush();               
                               
                        }
                       
                } catch (IOException e) {
                        throw new RuntimeException("读写文件失败");
                }
                finally{
                        try {
                                if(bufr!=null)
                                        bufr.close();
                        } catch (IOException e) {
                                // TODO: handle exception
                                throw new RuntimeException("关闭读取流失败");
                        }
                        try {
                                if(bufw!=null)
                                        bufw.close();
                        } catch (IOException e) {
                                // TODO: handle exception
                                throw new RuntimeException("关闭写入流失败");
                        }
                }
        }
}

class Student implements Comparable {
        private String name ;
        private int cn;
        private int ma;
        private int en;
        private int sum;
       
        public Student(String name, int cn, int ma, int en) {
                this.name = name;
                this.cn = cn;
                this.ma = ma;
                this.en = en;
                this.sum =cn+ma+en;
        }
        public String getName(){
                return name;
        }
        public int getCn(){
                return cn;
        }
        public int getMa(){
                return ma;
        }
        public int getEn(){
                return en;
        }
        public int getSum(){
                return sum;
        }
        @Override
        public int compareTo(Object obj) {
                if(obj == null){
                        throw new RuntimeException("学生对象不存在");
                }
                Student stu = (Student)obj;       
                if(this.sum>stu.sum)
                        return -1;
                else if(this.sum==stu.sum)
                        return 0;
                return 1;
        }
       
}

10 个回复

倒序浏览
高手。。。。。。。。。。。。。。。啊哈哈哈哈哈哈哈哈
回复 使用道具 举报
和我的想法不一样,我就会用键值对集合来做。判断学生对象是否重复也不够严谨
回复 使用道具 举报
学习了,。。。
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-30 10:05:37
报纸
好多try catch,我怎么遇到异常全抛了
回复 使用道具 举报
liudongcan 发表于 2015-8-30 09:48
和我的想法不一样,我就会用键值对集合来做。判断学生对象是否重复也不够严谨 ...

不足肯定是有的,大家交流学习,才能共同进步

点评

搞错,也是要自定义学生类的  发表于 2015-8-30 11:23
用Map做嘛,不用自定义学生类  发表于 2015-8-30 11:18
回复 使用道具 举报
liudongcan 发表于 2015-8-30 09:48
和我的想法不一样,我就会用键值对集合来做。判断学生对象是否重复也不够严谨 ...

老毕视频里讲过如果首要条件相等要判断次要的 ,只是我头大了没高兴写
回复 使用道具 举报
ksh 中级黑马 2015-8-30 13:34:21
8#
刘意老师的课里有介绍的
回复 使用道具 举报
xiao_D 高级黑马 2015-8-30 18:08:55
9#
思路那么清晰了  有什么头疼的   理解后试着敲代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马