需求
有5个学生,每个学生有3门课的成绩,
从键盘输入以上数据(包括姓名,三门课成绩),
输入的格式:如 zhangsan,30,40,60计算出总成绩,
并把学生的信息和计算出的总分数按高低顺序存放在磁盘文件"stuinfo.txt"中
1.描述学生对象。
2.定义一个可操作学生对象的工具类。
思路
1.通过获取键盘录入一行数据,并将改行中的信息取出封装成学生对象。
2.因为学生有很多,并且需要存储,使用到集合,同时要对学生的总分排序,所以使用TreeSet集合。
3.将集合的信息写入到一个文件中。
编码
import java.util.*;
import java.io.*;
// 学生类
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;
sum =ma+cn+en;
}
public String getName(){
return name;
}
public int getSum(){
return sum;
}
// 重写hashCode()与equals()按照自定义要求保证元素唯一性
public int hashCode(){
return name.hashCode()+sum*78;
}
public boolean equals(Object obj){
if(!(obj instanceof Student))
throw new RuntimeException("类型不匹配!");
Student s=(Student)obj;
return this.name.equals(s.name) && this.sum==s.sum;
}
// 重写compareTo()方法,定义比较规则
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 toString(){
return "student["+name+","+ma+","+cn+","+en+"]";
}
}
// 工具类
class StudentInfoTool{
public static Set<Student> getStudents()throws IOException{
return getStudents(null);
}
// 键盘录入
public static Set<Student> getStudents(Comparator<Student> cmp)throws IOException{
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
String line=null;
Set<Student> stus=null;
if(cmp==null)
stus = new TreeSet<Student>();
else
stus= new TreeSet<Student>(cmp);
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("stuinfo.txt"));
for(Student stu:stus){
bufw.write(stu.toString()+"\t");
bufw.write(stu.getSum()+"");
bufw.newLine();
bufw.flush();
}
bufw.close();
}
}
// 测试类
class StudentInfoTest{
public static void main(String[] args)throws IOException{
// 生成比较器
Comparator<Student> cmp=Collections.reverseOrder();
// 键盘录入
Set<Student> stus=StudentInfoTool.getStudents(cmp);
// 写入指定文件中
StudentInfoTool.write2File(stus);
}
}