class Student implements Comparable<Student>
{
//定义学生类的name变量
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 this.name;
}
//定义获取学生总分的方法
public int getSum(){
return this.sum;
}
//定义判断两个学生对象是否相等的方法
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{
return getStudents(null);
}
public static Set<Student> getStudents(Comparator<Student> cmp) throws NumberFormatException, IOException{
//定义一个缓冲字符输入流用于从标准输入中读取数据
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//字义一个字符串变量用于存放从标准输入中读入的一行数据
String line=null;
//定义一个存放Student类元素的Set集合,其初始值为null
Set<Student> stus=null;
//下面两行个if代码块根据传入的比较器返回使用不同的比较器排序后的stus
if(cmp==null){
stus=new TreeSet<Student>();
}
else{
stus=new TreeSet<Student>(cmp);
}
//当前输入不会空时进入循环
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
//定义一个字符串数组,将从标准输入读入的数据用","作为分隔符分隔成4个字符串
String[] info=line.split(",");
/* System.out.println(info.length);
for(int i=0;i<info.length;i++){
if(info[i]!=" "){
System.out.println(info[i]);}
}**/
Student stu=new Student(info[0],Integer.parseInt(info[1]),
Integer.parseInt(info[2]), Integer.parseInt(info[3]));
stus.add(stu);
System.out.println(stus.size());
}
bufr.close();
return stus;
}
public static void writeToFile(Set<Student> stus) throws IOException{
//定义一个缓冲输出流,其节点为一个向stu.txt输出的文件输出流
BufferedWriter bufw=new BufferedWriter(new FileWriter("stu.txt"));
//遍历stus集合中的元素,向文件中写入stus中元素的toString()方法返回的信息,
//
for(Student stu:stus){
bufw.write(stu.toString()+"\t");
bufw.write(stu.getSum()+"");
//输出完一个学生信息以后进行换行
bufw.newLine();
//刷新流
bufw.flush();
}
//关闭流
bufw.close();
}
}
public class Test3{
public static void main(String[] args) throws IOException{
Comparator<Student> cmp=Collections.reverseOrder();//反转比较器的顺序
Set<Student> stus=StudentInfoTool.getStudents(cmp);
System.out.println(stus);
StudentInfoTool.writeToFile(stus);
}
}
这个代码···我知道有的哥们一看就知道是啥了不过放心我已经搞完这个了现在就是有些想不通的回头看看,就是说这前面的将键盘输入读取下来并放进数组集合中去的我都试验过了是没错的,关键是第二个writeToFile()方法这里,我感觉只要我调用了writeToFile()方法无论我传入的参数为不为空它至少得给我创建个文件吧,可是我连文件都看到,是不是因为 BufferedWriter的问题?求解答
|