黑马程序员技术交流社区

标题: 这题搞的我头都疼了 [打印本页]

作者: chensheng06    时间: 2015-8-30 00:41
标题: 这题搞的我头都疼了
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;
        }
       
}
作者: 大大的大孩    时间: 2015-8-30 07:38
高手。。。。。。。。。。。。。。。啊哈哈哈哈哈哈哈哈
作者: liudongcan    时间: 2015-8-30 09:48
和我的想法不一样,我就会用键值对集合来做。判断学生对象是否重复也不够严谨
作者: ln0491    时间: 2015-8-30 09:58
学习了,。。。
作者: asinzuo    时间: 2015-8-30 10:05
好多try catch,我怎么遇到异常全抛了
作者: chensheng06    时间: 2015-8-30 11:06
liudongcan 发表于 2015-8-30 09:48
和我的想法不一样,我就会用键值对集合来做。判断学生对象是否重复也不够严谨 ...

不足肯定是有的,大家交流学习,才能共同进步
作者: chensheng06    时间: 2015-8-30 11:09
liudongcan 发表于 2015-8-30 09:48
和我的想法不一样,我就会用键值对集合来做。判断学生对象是否重复也不够严谨 ...

老毕视频里讲过如果首要条件相等要判断次要的 ,只是我头大了没高兴写
作者: ksh    时间: 2015-8-30 13:34
刘意老师的课里有介绍的
作者: xiao_D    时间: 2015-8-30 18:08
思路那么清晰了  有什么头疼的   理解后试着敲代码




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2