Java集合框架17:鍵盤錄入學生資訊按照總分排序後輸出到控制檯
阿新 • • 發佈:2018-11-17
案例演示
package grade; importjava.util.Comparator; import java.util.Scanner; import java.util.TreeSet; public class Test7 { /** * A:案例演示 * 需求:鍵盤錄入5個學生資訊(姓名,語文成績,數學成績,英語成績),按照總分從高到低輸出到控制檯 * * 分析: * 1,定義一個學生類 * 成員變數:姓名,語文成績,數學成績,總成績 * 成員方法:空參構造,有參構造的引數分別是姓名,語文成績,數學成績,英語成績 * toString方法,在遍歷集合中的Student物件列印物件引用的時候會顯示屬性值 * 2,鍵盤錄入需要Scanner,建立鍵盤錄入物件 * 3,建立TreeSet集合物件,在TreeSet的建構函式中傳入比較器,按照總分比較 * 4,錄入五個學生,所以以集合中的學生個數為判斷條件,如果size是小於5就進行儲存 * 5,將錄入的字串切割,用逗號切割,會返回一個字串陣列,將字串陣列中從二個元素轉換成int數 * 6,將轉換後的結果封裝成student物件,將student新增到TreeSet集合中 * 7,遍歷TreeSet集合列印每一個student對像 */ public static void main(String[] args) { //2,鍵盤錄入需要Scanner,建立鍵盤錄入物件 Scanner sc = new Scanner(System.in); System.out.println("請輸入學生成績格式是:姓名,語文成績,數學成績,英語成績"); //3,建立TreeSet集合物件,在TreeSet的建構函式中傳入比較器,按照總分比較 TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>(){ @Override public int compare(Student s1, Student s2) { int num = s2.getSum() - s1.getSum(); return num == 0 ? 1 : num; } }); //4,錄入五個學生,所以以集合中的學生個數為判斷條件,如果size是小於5就進行儲存 while(ts.size() < 5) { //5,將錄入的字串切割,用逗號切割,會返回一個字串陣列,將字串陣列中從二個元素轉換成int數 String line = sc.nextLine(); String[] arr = line.split(","); int chinese = Integer.parseInt(arr[1]); int math = Integer.parseInt(arr[2]); int english = Integer.parseInt(arr[3]); //6,將轉換後的結果封裝成student物件,將student新增到TreeSet集合中 ts.add(new Student(arr[0],chinese,math,english)); } // 7,遍歷TreeSet集合列印每一個student對像 System.out.println("排序後的學生資訊:"); for(Student s : ts) { System.out.println(s); } } }
package set; public class Student { private String name; private int chinese; private int math; private int english; private int sum; 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; this.sum = this.chinese + this.math + this.english; } public int getSum() { return sum; } public String toString() { return name + "," + chinese + "," + math + "," + english + "," + sum; } }