Java练习题——集合
生活随笔
收集整理的這篇文章主要介紹了
Java练习题——集合
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 集合練習(xí)題
基本思路:
代碼- Person
- 測(cè)試類(lèi)(用的是Arraylist,滿(mǎn)足基本要求)
- 測(cè)試類(lèi)2(用TreeSet集合,完成擴(kuò)展)
- 有錯(cuò)誤或問(wèn)題請(qǐng)指出
集合練習(xí)題
考察點(diǎn):集合的創(chuàng)建,集合的迭代,自定義對(duì)象equals方法的重寫(xiě)等。
題目: 學(xué)生基本信息查重
需求: 學(xué)生有兩個(gè)屬性(姓名、年齡) 學(xué)生信息由用戶(hù)輸入,將學(xué)生存在集合中 重寫(xiě)equals方法,讓學(xué)生進(jìn)行比較,姓名、年齡一樣的學(xué)生視作同一個(gè)學(xué)生,只保留一個(gè)學(xué)生信息 打印所有學(xué)生信息
擴(kuò)展: 創(chuàng)建學(xué)生時(shí)自動(dòng)給學(xué)生隨機(jī)學(xué)號(hào),學(xué)生學(xué)號(hào)不可重復(fù),輸出所有學(xué)生信息,按學(xué)號(hào)升序排序
基本思路:
- 創(chuàng)建一個(gè)Person類(lèi),添加屬性:name,age; 封裝這些屬性并分別設(shè)置各個(gè)屬性的方法。
- 根據(jù)用戶(hù)輸入的對(duì)象個(gè)數(shù)創(chuàng)建Person對(duì)象,接收用戶(hù)在控制臺(tái)上輸入的每個(gè)對(duì)象的信息。(注意,將有些Person對(duì)象的名字和年齡設(shè)置相同),學(xué)過(guò)異常的可以直接
- 創(chuàng)建一個(gè)ArrayList集合,將Person對(duì)象添加到ArrayList集合中。
- 使用迭代器迭代輸出該List集合
- 重寫(xiě)equals,對(duì)學(xué)生對(duì)象的姓名、年齡比較,可以去除ArrayList集合中重復(fù)的Person對(duì)象。姓名和年齡相同視為重復(fù)的Person對(duì)象
代碼
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();//判斷傳過(guò)來(lái)的的類(lèi)型對(duì)象時(shí)候與調(diào)用此方法的類(lèi)型對(duì)象指向同一地址if (this == obj) {return true;}//判斷穿過(guò)來(lái)的類(lèi)型對(duì)象是不是Person對(duì)象if (obj instanceof Person) {//進(jìn)行拆箱p = (Person) obj;}return this.age == p.age && this.name.equals(p.name);} }測(cè)試類(lèi)(用的是Arraylist,滿(mǎn)足基本要求)
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);}//添加數(shù)據(jù)public static void addTo(Scanner scanner, ArrayList<Person> list) {int chose = 0;do {Person user = new Person();System.out.print("請(qǐng)輸入姓名:");user.setName(scanner.next());//因?yàn)橛袝r(shí)候手抖會(huì)粗心輸入的值不是數(shù)字類(lèi)型,所以當(dāng)輸入的值與想要的值不匹配時(shí)會(huì)報(bào)異常(可以看另一篇博文(異常))//所以對(duì)可能報(bào)異常的地方用`try...catch`圈起來(lái),有異常不提醒直接跳過(guò)本次循環(huán)try {System.out.print("請(qǐng)輸入年齡:");user.setAge(scanner.nextInt());} catch (InputMismatchException e) {System.out.println("年齡錯(cuò)誤,重新錄入信息!");//`.nextLine()`可以處理在緩存空間的值,詳情可以看`異常`博文里面有個(gè)用戶(hù)上輸入案例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) {//增強(qiáng)for循環(huán)(`foreach`)System.out.println(p.getName() + "\t" + p.getAge());}}//刪除重復(fù)數(shù)據(jù)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))) {//這里是用了重寫(xiě)后的`equals`方法if (j > i) {list.remove(list.get(j));}}}}} }測(cè)試類(lèi)2(用TreeSet集合,完成擴(kuò)展)
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());}}//錄入學(xué)生成績(jī)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("請(qǐng)輸入姓名:");s.setName(scanner.next());System.out.print("隨機(jī)學(xué)號(hào):"); // 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("請(qǐng)輸入成績(jī):");s.setScore(scanner.nextInt());list.add(s);System.out.println("-----------------------");} catch (Exception e) {System.out.println("學(xué)號(hào)/成績(jī)錯(cuò)誤,再來(lái)!");scanner.nextLine();i = i - 1;}}}//統(tǒng)計(jì)出班級(jí)的及格率和優(yōu)秀率(分?jǐn)?shù)不低于60及格,分?jǐn)?shù)不低于80算優(yōu)秀)(20分)public static void statistics(TreeSet<Student> list) {int pass = 0;//及格人數(shù)int excellent = 0;//優(yōu)秀人數(shù)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("及格人數(shù):" + pass + "\n優(yōu)秀人數(shù):" + excellent);System.out.printf("及格率:%.2f%c\n優(yōu)秀率:%.2f%c\n", passRate, '%', excellentRate, '%');} }有錯(cuò)誤或問(wèn)題請(qǐng)指出
總結(jié)
以上是生活随笔為你收集整理的Java练习题——集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PLC编程之ST语言
- 下一篇: java美元兑换,(Java实现) 美元