/* * 3、 有五個學生,每個學生有3門課(語文、數學、英語)的成績, * 寫一個程序接收從鍵盤輸入學生的信息,輸入格式為:name,30,30,30(姓名,三門課成績), * 然后把輸入的學生信息按總分從高到低的順序寫入到一個名稱"stu.txt"文件中。 * 要求:stu.txt文件的格式要比較直觀,打開這個文件,就可以很清楚的看到學生的信息 * */ import java.io.*; import java.util.*; public class Test3 { public static void main(String[] args)throws Exception{ //傳入學生人數 Student(5); } //鍵盤錄入學生,保存到stu.txt的方法 public static void Student(int number)throws Exception{ //創建Scanner對象 接受從控制台輸入 Scanner in=new Scanner(System.in); //因為可能會出現姓名和總分都一樣的學生,為了保證學生不丟失,建立List容器 List<Student> list=new ArrayList<>(); //循環錄入學生到集合,排好順序 System.out.println("輸入格式為: 姓名,語文,數學,英語(,號是小寫狀態)"); for(int x=1;x<=number;x++){ System.out.println("請輸入第"+x+"個學生的信息"); String[] s=in.nextLine().split(","); int a=Integer.parseInt(s[1]); int b=Integer.parseInt(s[2]); int c=Integer.parseInt(s[3]); Student stu=new Student(s[0],a,b,c); list.add(stu); } //用比較器進行總分從高到低的排序 Collections.sort(list,new StuCompare()); //定義輸出流輸出到stu.txt BufferedWriter bufw=new BufferedWriter(new FileWriter("stu.txt")); for(Student stu:list){ bufw.write(stu.getStu()); bufw.newLine(); bufw.flush(); } //關閉資源 in.close(); bufw.close(); } } //學生對象 class Student{ private String name; private int a, b, c,sum; //學生對象建立需要傳入姓名和3門課的成績 Student(String name, int a, int b, int c){ this.name=name; this.a=a; this.b=b; this.c=c; sum=a+b+c; } public int getsum(){ return sum; } //輸出一個符合格式的字符串 public String getStu(){ return name+" 數學:"+a+" 語文:"+b+" 英語:"+c+" 總分:"+sum; } } //定義比較器,按總分排序 class StuCompare implements Comparator<Student>{ public int compare(Student s1,Student s2){ int a=new Integer(s2.getsum()).compareTo(s1.getsum()); return a; } }