Java练习题——集合
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Java练习题——集合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                文章目錄
- 集合練習題
 基本思路:
 代碼
- Person
- 測試類(用的是Arraylist,滿足基本要求)
- 測試類2(用TreeSet集合,完成擴展)
 
 
- 有錯誤或問題請指出
集合練習題
考察點:集合的創建,集合的迭代,自定義對象equals方法的重寫等。
 題目: 學生基本信息查重
 需求: 學生有兩個屬性(姓名、年齡) 學生信息由用戶輸入,將學生存在集合中 重寫equals方法,讓學生進行比較,姓名、年齡一樣的學生視作同一個學生,只保留一個學生信息 打印所有學生信息
 擴展: 創建學生時自動給學生隨機學號,學生學號不可重復,輸出所有學生信息,按學號升序排序
基本思路:
 
- 創建一個Person類,添加屬性:name,age; 封裝這些屬性并分別設置各個屬性的方法。
- 根據用戶輸入的對象個數創建Person對象,接收用戶在控制臺上輸入的每個對象的信息。(注意,將有些Person對象的名字和年齡設置相同),學過異常的可以直接
- 創建一個ArrayList集合,將Person對象添加到ArrayList集合中。
- 使用迭代器迭代輸出該List集合
- 重寫equals,對學生對象的姓名、年齡比較,可以去除ArrayList集合中重復的Person對象。姓名和年齡相同視為重復的Person對象
代碼
 
Person
public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age>0&&age<120){this.age = age;}else {this.age = 17;}}@Overridepublic boolean equals(Object obj) {Person p = new Person();//判斷傳過來的的類型對象時候與調用此方法的類型對象指向同一地址if (this == obj) {return true;}//判斷穿過來的類型對象是不是Person對象if (obj instanceof Person) {//進行拆箱p = (Person) obj;}return this.age == p.age && this.name.equals(p.name);} }測試類(用的是Arraylist,滿足基本要求)
import java.util.ArrayList; import java.util.InputMismatchException; import java.util.Scanner;public class AggregateWork {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);ArrayList<Person> list = new ArrayList<>();addTo(scanner, list);ergodic(list);System.out.println("----------------");removeUserList(list);ergodic(list);}//添加數據public static void addTo(Scanner scanner, ArrayList<Person> list) {int chose = 0;do {Person user = new Person();System.out.print("請輸入姓名:");user.setName(scanner.next());//因為有時候手抖會粗心輸入的值不是數字類型,所以當輸入的值與想要的值不匹配時會報異常(可以看另一篇博文(異常))//所以對可能報異常的地方用`try...catch`圈起來,有異常不提醒直接跳過本次循環try {System.out.print("請輸入年齡:");user.setAge(scanner.nextInt());} catch (InputMismatchException e) {System.out.println("年齡錯誤,重新錄入信息!");//`.nextLine()`可以處理在緩存空間的值,詳情可以看`異常`博文里面有個用戶上輸入案例scanner.nextLine();chose = chose - 1;continue;}list.add(user);chose++;System.out.println("----------------");} while (chose < 5);}//遍歷集合private static void ergodic(ArrayList<Person> list) {for (Person p : list) {//增強for循環(`foreach`)System.out.println(p.getName() + "\t" + p.getAge());}}//刪除重復數據public static void removeUserList(ArrayList<Person> list) {for (int i = 0; i < list.size(); i++) {for (int j = 0; j < list.size() - 1; j++) {if (list.get(i).equals(list.get(j))) {//這里是用了重寫后的`equals`方法if (j > i) {list.remove(list.get(j));}}}}} }測試類2(用TreeSet集合,完成擴展)
package com.fish.weeklyhomework.treesetdemo;import java.util.Random; import java.util.TreeSet; import java.util.Scanner;public class WorkMain {public static void main(String[] args) {TreeSet<Student> list = new TreeSet<>((o1, o2) -> {int num = o2.getScore() - o1.getScore();long num2;if (num == 0) {num2 = o1.getNumber() - o2.getNumber();return Math.toIntExact(num2);} else {return num;}});Scanner scanner = new Scanner(System.in);register(list, scanner);statistics(list);for (Student s :list) {System.out.println(s.getNumber() + " " + s.getName() + " " + s.getScore());}}//錄入學生成績public static void register(TreeSet<Student> list, Scanner scanner) {Random random = new Random();for (int i = 0; i < 5; i++) {try {Student s = new Student();System.out.print("請輸入姓名:");s.setName(scanner.next());System.out.print("隨機學號:"); // s.setNumber(random.nextInt(65)*random.nextInt(65));s.setNumber((long) Math.pow(random.nextInt(1000), 2));System.out.println(s.getNumber());for (Student s1 : list) {if (s.getNumber() == s1.getNumber() && s != s1){throw new Exception();}}System.out.print("請輸入成績:");s.setScore(scanner.nextInt());list.add(s);System.out.println("-----------------------");} catch (Exception e) {System.out.println("學號/成績錯誤,再來!");scanner.nextLine();i = i - 1;}}}//統計出班級的及格率和優秀率(分數不低于60及格,分數不低于80算優秀)(20分)public static void statistics(TreeSet<Student> list) {int pass = 0;//及格人數int excellent = 0;//優秀人數for (Student student : list) {if (student.getScore() >= 60) {pass = pass + 1;}if (student.getScore() >= 80) {excellent = excellent + 1;}}double passRate = (double) pass / list.size();double excellentRate = (double) excellent / list.size();System.out.println("及格人數:" + pass + "\n優秀人數:" + excellent);System.out.printf("及格率:%.2f%c\n優秀率:%.2f%c\n", passRate, '%', excellentRate, '%');} }有錯誤或問題請指出
總結
以上是生活随笔為你收集整理的Java练习题——集合的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: PLC编程之ST语言
- 下一篇: 黑客帝国全解析
