輸入學生的姓名,語文成績,數學成績,英語成績,按照成績進行排序,並放到文字文件中
阿新 • • 發佈:2018-12-06
鍵盤錄入學生資訊(姓名,語文成績,數學成績,英語成績),按照分數從高到低進行排序。如果總分相等,按照語文成績進行排序;如果語文成績相等,按照數學成績進行排序;如果數學成績相等,按照英語成績進行排序。
分析:
- 建立學生類
- 建立集合物件
TreeSet<Student> - 鍵盤錄入學生資訊儲存到集合中
- 遍歷集合,把資料寫到文字檔案
程式碼:
import java.io.BufferedWriter; import java.io.FileWriter; import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet; public class Test2 { public static void main(String[] args) throws Exception { //建立集合物件 TreeSet<Student> ts=new TreeSet<Student>(new MyComparator()); //鍵盤錄入學生資訊儲存到集合 for(int x=1;x<=5;x++){ Scanner sc=new Scanner(System.in); System.out.println("請錄入第"+x+"個學生資訊"); System.out.println("姓名:"); String name=sc.nextLine(); System.out.println("語文成績:"); int chinese=sc.nextInt(); System.out.println("數學成績:"); int math=sc.nextInt(); System.out.println("英語成績:"); int english=sc.nextInt(); //建立學生物件 Student s=new Student(); s.setName(name); s.setChinese(chinese); s.setMath(math); s.setEnglish(english); //把學生資訊新增到集合中 ts.add(s); } //遍歷集合,把資料寫到文字檔案 BufferedWriter bw=new BufferedWriter(new FileWriter("student.txt")); bw.write("學生資訊如下:"); bw.newLine(); bw.flush(); bw.write("姓名,語文成績,數學成績,英語成績:"); bw.newLine(); bw.flush(); for(Student s:ts){ StringBuilder sb=new StringBuilder(); sb.append(s.getName()); sb.append(","); sb.append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish()); bw.write(sb.toString()); bw.newLine(); bw.flush(); } //釋放資源 bw.close(); System.out.println("學生資訊儲存完畢!"); } } //建立比較器 class MyComparator implements Comparator{ @Override public int compare(Object o1, Object o2) { // 強轉 Student s1=(Student)o1; Student s2=(Student)o2; //比較總分 int num=new Integer(s2.getSum()).compareTo(new Integer(s1.getSum())); if(num==0){ //如果總分相同,按照語文比較 int num1=s2.getChinese()-s1.getChinese(); if(num1==0){ //如果語文相同,按照數學比較 int num2=s2.getMath()-s1.getMath(); if(num2==0){ //如果數學相同,按照英語比較 int num3=s2.getEnglish()-s1.getEnglish(); if(num3==0){ //如果英語也相同,按照姓名比較 int num4=s2.getName().compareTo(s1.getName()); if(num4==0){ return 0; }else if(num4>0){ return 1; } }else if(num3>0){ return 1; } }else if(num2>0){ return 1; } }else if(num1>0){ return 1; } }else if(num>0){ return 1; } return -1; } } class Student{ //姓名 private String name; //語文成績 private int chinese; //數學成績 private int math; //英語成績 private int english; //建構函式 public Student() { super(); } public Student(String name,int chinese,int math,int english){ super(); this.name=name; this.chinese=chinese; this.math=math; this.english=english; } //基本方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getChinese() { return chinese; } public void setChinese(int chinese) { this.chinese = chinese; } public int getMath() { return math; } public void setMath(int math) { this.math = math; } public int getEnglish() { return english; } public void setEnglish(int english) { this.english = english; } public int getSum(){ return this.chinese+this.math+this.english; } }
執行結果:
在控制檯上錄入五個學生資訊。在當前目錄下,生成了student.txt檔案。檔案中的內容為: