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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© teng13114 中级黑马   /  2016-1-17 10:50  /  657 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有五个学生,每个学生有3门课的成绩,
从键盘输入以上的数据(包括姓名,三门课成绩), 输入的格式:如:zhangsan,30,40,60。计算出总成绩。
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
import java.io.*;
import java.util.*;
class Student implements Comparable<Student>{
        private String name;
        private int ma,cn,en;
        private int sum;
       
        Student(String name, int ma, int cn, int en){
                this.name = name;
                this.ma = ma;
                this.cn = cn;
                this.en = en;
                this.sum = ma+cn+en;
        }
       
        public int compareTo(Student s){
                int num = new Integer(this.sum).compareTo(new Integer(s.sum));
                if(num==0)
                        return this.name.compareTo(s.name);
                return num;
        }
        public String getName(){
                return name;
        }
       
        public int getSum(){
                return sum;
        }
       
        public int hashCode(){
                return name.hashCode()+sum*78;
        }
       
        public boolean equals(Object obj){
                if(!(obj instanceof Student)){
                        throw new ClassCastException("类型不匹配");
                }
                Student s = (Student)obj;
                return this.name.equals(s.name) && this.sum==s.sum;
        }
       
        public String toString(){
                return "student["+name+","+ma+","+cn+","+en+"]";//好像是这句话的问题,毕老师视频中", "逗号后面有个空格。不明白为什么?                                                                                                                                                         
        }
}

class StudentInfoTool{
        public static Set<Student> getStudents() throws NumberFormatException, IOException{
                BufferedReader bufr =  new BufferedReader(new InputStreamReader(System.in));
               
                String line =  null;
                Set<Student> stus = new TreeSet<Student>();
                while((line=bufr.readLine())!=null){
                        if("over".equals(line))
                                break;
                        String[] info = line.split(",");
                        Student stu = new Student(info[0],Integer.parseInt(info[1]),
                                        Integer.parseInt(info[2]),Integer.parseInt(info[3]));
                       
                        stus.add(stu);
                }
                bufr.close();
               
                return stus;
        }
       
        public static void write2File(Set<Student> stus) throws IOException{
                BufferedWriter bufw = new BufferedWriter(new FileWriter("stus.txt"));
                for(Student stu : stus){
                        bufw.write(stu.toString()+"\t");//制表位Tab
                        bufw.write(stu.getSum()+"");//这儿加上字符串,否则乱码。
                        bufw.newLine();
                        bufw.flush();
                }
                bufw.close();
        }
}

public class StudentInfoDemo {
        public static void main(String[] args) throws NumberFormatException, IOException {
                Set<Student> stus = StudentInfoTool.getStudents();
                StudentInfoTool.write2File(stus);
               
        }

}
用记事本打开后,有一组数据没有制表符。代码红色的应该出问题的地方。我按照毕老师的视频,", "逗号后加入空格后问题就消失。求大神解释一下为什么会这样?

捕获.PNG (10.75 KB, 下载次数: 8)

捕获.PNG

捕获1.PNG (11.24 KB, 下载次数: 13)

捕获1.PNG

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马