Java集合框架篇-64-TreeSet集合练习题2
?????? 這篇繼續來學習一個關于TreeSet集合編程題的分析過程和代碼實現過程。這個題目還是比較復雜的,涉及到OOP,鍵盤輸入和集合排序等。編程的題目是:輸入5個學生信息,格式為(姓名,語文成績,數學成績,英語成績),按照總分從高到低排序輸出。
1.分析
?????? 看題目,我們第一個看到的是學生信息,那么是不是需要寫一個學生類,然后看到需要鍵盤輸入,但是輸入格式是一組,所以這里還需要字符串切割,根據逗號切割。切割出來數字符串數組,所以需要把成績的字符串類型轉換成Int類型。看到總分排序,所以我們需要Set集合,這里我們使用TreeSet集合。總分比較,說明TreeSet集合傳入參數是一個比較器,比較的是總分成績。大致,我們可以按照以下步驟去劃分這個題目成不同的小任務去實現。
1)定義一個Student類
?? 成員變量:姓名,語文成績,數學成績,英語成績,總分成績
?? 成員方法:空參,有參構造,有參構造的參數分別是姓名,語文成績,數學成績,英語成績
?????????????????? toString方法,需要重寫,遍歷學生類打印不是內存地址,而是屬性的值。
2)創建鍵盤錄入對象,需要導入Scanner類
3)創建TreeSet集合對象,傳入參數是比較器,總分比較
4)錄入5個學生信息,集合的size就是等于5,超過不繼續存儲
5)錄入字符串切割,逗號切割,返回是一個字符串數組,需要把成績字符串轉成Int類型
6)轉換后結果封裝到學生類對象里,然把學生類對象添加到TreeSet集合中
7)遍歷TreeSet集合,打印學生信息
2.代碼實現過程
????? 根據上分析步驟,我們嘗試去完成一部分代碼,先完成那些簡單,自己能夠完成的。然后對照下面的代碼,參考寫出自己的代碼。
學生類Student.java 代碼如下。
package bean;public class Student {private String name;private int yuWenScore;private int mathScore;private int englishScore;private int totalScore;public Student() {super();}public Student(String name, int yuWenScore, int mathScore, int englishScore) {super();this.name = name;this.yuWenScore = yuWenScore;this.mathScore = mathScore;this.englishScore = englishScore;this.totalScore = this.yuWenScore + this.mathScore + this.englishScore;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getYuWenScore() {return yuWenScore;}public void setYuWenScore(int yuWenScore) {this.yuWenScore = yuWenScore;}public int getMathScore() {return mathScore;}public void setMathScore(int mathScore) {this.mathScore = mathScore;}public int getEnglishScore() {return englishScore;}public void setEnglishScore(int englishScore) {this.englishScore = englishScore;}public String toString() {return name + ","+ yuWenScore + ","+mathScore + ","+englishScore + ","+ totalScore;}public int getTotalScore() {return totalScore;}}測試類,代碼
package treeset;import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet;import bean.Student;public class Test1_TreeSet {public static void main(String[] args) {//2.創建Sacnner對象Scanner sc = new Scanner(System.in);System.out.println("請輸入學生成績,格式是:姓名,語文成績,數學成績,英語成績");//3.創建treeset集合TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {//降序int num = s2.getTotalScore() - s1.getTotalScore();return num == 0? 1 : num; //總分成績相同的也需要存入集合}});//4.錄入5個學生成績信息,開始循環while(ts.size() < 5) {//5. 切割字符串String line = sc.nextLine();//切割并存入數組String[] arr = line.split(",");//轉換成Intint chinese = Integer.parseInt(arr[1]);int math = Integer.parseInt(arr[2]);int english = Integer.parseInt(arr[3]);//6.轉換后結果封裝到學生類對象里,然把學生類對象添加到TreeSet集合中ts.add(new Student(arr[0],chinese, math, english));}//7.遍歷TreeSet集合,打印學生信息System.out.println("排序后的學生信息");for (Student student : ts) {System.out.println(student);}}}控制臺測試結果:
請輸入學生成績,格式是:姓名,語文成績,數學成績,英語成績 zhangsan,50,60,89 lisi,77,88,99 wanger,55,99,100 liuliu,88,100,100 zhouqi,88,99,94 排序后的學生信息 liuliu,88,100,100,288 zhouqi,88,99,94,281 lisi,77,88,99,264 wanger,55,99,100,254 zhangsan,50,60,89,199 ?????? 這里需要注意下逗號,如果代碼中切割采用是英文輸入法的逗號,輸入成績的時候逗號也需要寫英文,否則切割之后不是你想要的數組,可能報索引越界異常錯誤。總結
以上是生活随笔為你收集整理的Java集合框架篇-64-TreeSet集合练习题2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创业公司商业计划书
- 下一篇: dnastar拼接反向互补序列_什么叫“