扑克牌都是由 "♠","♥","♣","♦" 4 种花色和 "2,3,4,···,A,J,Q,K," 13 种数字组合形成的 52 张正牌以及 "大王" 和 "小王" 两张副牌组成。本次挑战将结合本章所学知识模拟斗地主的洗牌与发牌过程。具体规则为:使用 54 张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人 17 张牌,最后三张留作底牌。
知识点
准备牌:
定义一个集合,存储 54 张牌。
定义一个集合,存储四种花色 "♠","♥","♣","♦"。
定义一个集合,存储 13 个序号。
可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
洗牌:
牌由 Collections 类的 shuffle() 方法进行随机排序。
发牌:
定义四个集合 存储三个玩家的牌和底牌。
看牌:
直接打印玩家和底牌集合。
提示: 循环遍历集合中的每一个元素,判断索引是否大于 51 ,小于 51 的对 3 取模运算,结果 0、1、2 分别对应三个玩家,当元素索引大于 51 的时候就将此牌添加到底牌集合中。

- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Collections;
-
- public class Poker {
- public static void main(String[] args) {
- ArrayList
array = new ArrayList(); - // 花色数组
- String[] colors = { "♥", "♣", "♦", "♠" };
- // 定义点数数组
- String[] numbers = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
-
- for (String col : colors) {
- for (String num : numbers) {
- array.add(col + num);
- }
- }
- // 添加大小牌
- array.add("大王");
- array.add("小王");
- // System.out.println(array);
-
- // 洗牌
- Collections.shuffle(array);
- // System.out.println(array);
-
- // 给三个玩家发牌
- ArrayList
player1 = new ArrayList<>(); - ArrayList
player2 = new ArrayList<>(); - ArrayList
player3 = new ArrayList<>(); - ArrayList
dipai = new ArrayList<>(); -
- for (int i = 0; i < array.size(); i++) {
- String poker = array.get(i);
- if (i >= array.size() - 3) {
- dipai.add(poker);
- } else if (i % 3 == 0) {
- player1.add(poker);
- } else if (i % 3 == 1) {
- player2.add(poker);
- } else if (i % 3 == 2) {
- player3.add(poker);
- }
- }
-
- // 看牌
- look("玩家: ", player1);
- look("玩家2: ", player2);
- look("玩家3: ", player3);
- look("底牌: ", dipai);
-
- }
-
- //定义看牌的方法
- public static void look(String player, ArrayList
arr) { - System.out.print(player);
- // for (String s : arr) {
- // System.out.print(s + " ");
- // }
- System.out.println(arr);
-
- }
- }
蓝桥班有 40 个学生,学号为 180201-180240, 全部参加 Java 集合阶段检测,给出所有同学的成绩 (可随机产生,范围为 50-100),请编写程序将本班 各位同学成绩从高往低排序打印输出。
知识点
某班有 40 个学生,学号为 180201-180240, 全部参加 Java 集合阶段检测,给出所有同学的成绩 (可随机产生,范围为 50-100),请编写程序将本班 各位同学成绩从高往低排序打印输出。
注:成绩相同时学号较小的优先打印。
要求:打印的信息包含学号、姓名(姓名统一为 “同学 J ”,J 的取值范围为 1 - 40)和成绩。
创建一个 Student 类,该类具有 int 类型的学号 id、String 类型的姓名 name、int 类型的成绩 score。
需要在 Student 类中重写 toString() 方法,格式如下:
"学号:" + id + ", 姓名:" + name + ", 成绩:" + score
创建一个 Results 类,该类为运行类,具有一个公共的静态的集合 data,该集合的泛型为 Student 类型用于储存班级内的学生对象。
在 Results 类中创建一个公共的静态的 initData() 方法,该方法用于初始化集合 data 存入 40 个学生对象,其中学生的 id 属性从 180201 递增至 180240,name 属性为 J1 至 J40 递增,score 属性为 50 + 50 内的随机数。
在 Results 类中创建一个公共的静态的 adjust() 方法,该方法用于对集合进行排序,排序规则为按照成绩从高到低。若成绩相同按照学号从小到大打印。
在 Results 类中创建一个公共的静态的 print() 方法,该方法用于打印集合内的学生对象。
输出格式请参照「挑战运行效果」,创建的文件名、方法名请按要求书写,为避免后台测试出现问题,请不要擅自修改输出格式。

- package org.lanqiao.main;
-
- import org.lanqiao.entity.*;
-
- import java.util.*;
-
- public class Results {
-
- public static List
data = new ArrayList(); -
- public static void initData() {
- Random random = new Random();
- int k;
- for (int i = 0; i < 40; i++) {
- k = i + 1;
- Student student = new Student(180201 + i, ("同学" + k), (random.nextInt(50) + 50));
- data.add(student);
- }
- }
-
- public static void adjust() {
- Collections.sort(data, new GradeComparator());
- }
-
- public static void print() {
- for (int i = 0; i < data.size(); i++) {
- Student s = data.get(i);
- System.out.println(s);
- }
- }
-
- //定义一个成绩比较器
- static class GradeComparator implements Comparator {
- @Override
- public int compare(Object o1, Object o2) {
- Student O1 = (Student) o1;
- Student O2 = (Student) o2;
- if(O2.score == O1.score){
- return O1.id-O2.id;
- }
- return O2.score - O1.score;
- }
-
- public static void main(String[] args) {
- Results results = new Results();
- results.initData();
- results.adjust();
- results.print();
- }
- }
-
-
- }
- package org.lanqiao.entity;
- public class Student {
- public int id;
- String name;
- public int score;
-
- @Override
- public String toString() {
- return "学号:" + id + ", 姓名:" + name + ", 成绩:" + score;
- }
-
- public Student() {
- }
-
- public Student(int id, String name, int score) {
- this.id = id;
- this.name = name;
- this.score = score;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getScore() {
- return score;
- }
-
- public void setScore(int score) {
- this.score = score;
- }
- }
HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时就是使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。本次挑战将模拟一个图书管理系统,对图书对象进行增加、删除、查询。
知识点
使用 HashSet 作为储存容器,模拟一个图书管理系统,该系统可以对容器内的图书进行增加、删除、查询。
addBook()、deleteBook()、selectBook() 。分别能够对图书进行增加、删除、查询。addBook() 方法的输入规则参照「测试验证」中的截图。deleteBook() 删除方法通过输入一个图书 id 进行删除指定图书,删除完成后输出“删除成功!”字样。selectBook() 通过输出所有图书对象的 toString() 方法输出图书信息
- package main;
-
- import entity.Book;
-
- import java.util.*;
- import java.util.Iterator;
- import static java.lang.System.exit;
-
- public class Library {
- static Set
set=new HashSet() ; - static Scanner input = new Scanner(System.in);
- public static void addBook() {
- System.out.println("请输入图书id:");
- int id = input.nextInt();
- System.out.println("请输入书名:");
- String name = input.next();
- System.out.println("请输入作者名");
- String author = input.next();
- System.out.println("请输入价格");
- double price = input.nextDouble();
-
- Book book = new Book(id, name, author, price);
- if ( set.add(book)){
- System.out.println("添加成功!");
- }else {
- System.out.println("添加失败");
- }
- }
- public static void deleteBook() {
- System.out.println("请输入要删除的图书id:");
- int id1=input.nextInt();
- for (Book book1:set){
- if (id1== book1.getId()){
- set.remove(book1);
- System.out.println("删除成功!");
- }
- }
- }
- public static void selectBook() {
- System.out.println("以下为所有图书信息!");
- Iterator it=set.iterator();
- //遍历迭代器并输出元素
- while(it.hasNext()) {
- //若不重载Cat类中toString()方法 输出的是地址
- System.out.println(it.next());
- }
- }
-
- public static void menu(){
- System.out.println("------欢迎到蓝桥图书馆------");
- System.out.println("1.添加图书");
- System.out.println("2.查询图书");
- System.out.println("3.删除图书");
- System.out.println("4.退出程序");
- System.out.println("请输入选项:");
- }
- public static void main(String[] args) {
-
- while (true) {
- menu();
-
- int select = input.nextInt();
- switch (select) {
- case 1:
- addBook();
- break;
- case 2:
- selectBook();
- break;
- case 3:
- deleteBook();
- break;
- case 4:
- System.out.println("退出成功");
- exit(-1);
- }
- }
- }
- }
- package entity;
-
- import java.util.Objects;
-
- public class Book {
- int id;
- String name;
- String author;
- double price;
-
- public Book(int id, String name, String author, double price) {
- this.id = id;
- this.name = name;
- this.author = author;
- this.price = price;
- }
-
- @Override
- public String toString() {
- return "Book{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", author='" + author + '\'' +
- ", price=" + price +
- '}';
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
- public double getPrice() {
- return price;
- }
-
- public void setPrice(double price) {
- this.price = price;
- }
- }