集合练习题(代码片段)

猪八戒1.0 猪八戒1.0     2022-12-01     134

关键词:

模拟斗地主

挑战介绍

扑克牌都是由 "♠","♥","♣","♦" 4 种花色和 "2,3,4,···,A,J,Q,K," 13 种数字组合形成的 52 张正牌以及 "大王" 和 "小王" 两张副牌组成。本次挑战将结合本章所学知识模拟斗地主的洗牌与发牌过程。具体规则为:使用 54 张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人 17 张牌,最后三张留作底牌。

知识点

  • List 接口
  • 泛型
  • 工具类

挑战内容

  1. 准备牌:

    定义一个集合,存储 54 张牌。

    定义一个集合,存储四种花色 "♠","♥","♣","♦"。

    定义一个集合,存储 13 个序号。

    可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。

  2. 洗牌:

    牌由 Collections 类的 shuffle() 方法进行随机排序。

  3. 发牌:

    定义四个集合 存储三个玩家的牌和底牌。

  4. 看牌:

    直接打印玩家和底牌集合。

提示: 循环遍历集合中的每一个元素,判断索引是否大于 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<String> array = new ArrayList<String>();
        // 花色数组
        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<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        ArrayList<String> 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<String> arr) 
        System.out.print(player);
//        for (String s : arr) 
//            System.out.print(s + " ");
//        
        System.out.println(arr);
        
    

挑战介绍

蓝桥班有 40 个学生,学号为 180201-180240, 全部参加 Java 集合阶段检测,给出所有同学的成绩 (可随机产生,范围为 50-100),请编写程序将本班 各位同学成绩从高往低排序打印输出。

知识点

  • List 接口
  • ArrayList 类
  • Collections 类
  • Comparator 接口

挑战内容

某班有 40 个学生,学号为 180201-180240, 全部参加 Java 集合阶段检测,给出所有同学的成绩 (可随机产生,范围为 50-100),请编写程序将本班 各位同学成绩从高往低排序打印输出。

注:成绩相同时学号较小的优先打印

要求:打印的信息包含学号、姓名(姓名统一为 “同学 J ”,J 的取值范围为 1 - 40)和成绩。

挑战要求

  1. 创建一个 Student 类,该类具有 int 类型的学号 id、String 类型的姓名 name、int 类型的成绩 score。

  2. 需要在 Student 类中重写 toString() 方法,格式如下:

    "学号:" + id + ", 姓名:" + name  + ", 成绩:" + score
    

  3. 创建一个 Results 类,该类为运行类,具有一个公共的静态的集合 data,该集合的泛型为 Student 类型用于储存班级内的学生对象。

  4. 在 Results 类中创建一个公共的静态的 initData() 方法,该方法用于初始化集合 data 存入 40 个学生对象,其中学生的 id 属性从 180201 递增至 180240,name 属性为 J1 至 J40 递增,score 属性为 50 + 50 内的随机数。

  5. 在 Results 类中创建一个公共的静态的 adjust() 方法,该方法用于对集合进行排序,排序规则为按照成绩从高到低。若成绩相同按照学号从小到大打印。

  6. 在 Results 类中创建一个公共的静态的 print() 方法,该方法用于打印集合内的学生对象。

  7. 输出格式请参照「挑战运行效果」,创建的文件名、方法名请按要求书写,为避免后台测试出现问题,请不要擅自修改输出格式。

package org.lanqiao.main;

import org.lanqiao.entity.*;

import java.util.*;

public class Results 

    public static List<Student> data = new ArrayList<Student>();

    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 算法来存储集合中的元素,因此具有很好的存取和查找性能。本次挑战将模拟一个图书管理系统,对图书对象进行增加、删除、查询。

知识点

  • Java 集合

挑战内容

使用 HashSet 作为储存容器,模拟一个图书管理系统,该系统可以对容器内的图书进行增加、删除、查询。

  1. 定义图书类 Book,具有属性账号 id,书名 name、作者 author 和价格 price,在创建图书对象时要求通过构造器进行创建,一次性将四个属性全部赋值,要求账户属性是 int 型,名称是 String 型,作者是 String 型,价格是 double,请合理进行封装。
  2. 在 Book 类添加 toString 方法,要求返回图书信息字符串,使用制表符隔开各信息。
  3. 要求定义一个图书馆 Library 类,在图书馆类中添加一个 HashSet 集合用于保存多本图书。
  4. 在图书馆类中要求具有以下方法:addBook()deleteBook()selectBook() 。分别能够对图书进行增加、删除、查询。
  5. addBook() 方法的输入规则参照「测试验证」中的截图。
  6. deleteBook() 删除方法通过输入一个图书 id 进行删除指定图书,删除完成后输出“删除成功!”字样。
  7. 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<Book> set=new HashSet<Book>() ;
    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;
    

集合练习题(代码片段)

模拟斗地主挑战介绍扑克牌都是由"♠","♥","♣","♦"4种花色和"2,3,4,···,A,J,Q,K,"13种数字组合形成的52张正牌以及"大王"和"小王"两张副牌组成。本次挑战将结合本章所学知识模拟斗地主的... 查看详情

集合实例练习(代码片段)

1、键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。a:自然排序测试类:`packagetreeSet集合;importjava.util.Comparator;importjava.util.Scanner;importjava.util.TreeSet;publicclassZuoyeScannerSelectpublicstaticvoidmain 查看详情

java集合练习题2(配有实例代码)(代码片段)

java集合练习题2(配有实例代码)**问题:3.编写Java程序,创建学员类Student,并添加姓名、年龄、性别等字段,创建3个ArrayList<T>对象,指定T为Student类,每个ArrayList<T>中添加一些学员对象,... 查看详情

练习:序列化集合(代码片段)

...Stream;23importjava.io.*;4importjava.util.ArrayList;56/*7练习:序列化集合8当我们想在文件中保存多个对象的时候9可以把多个对象存储到一个集合中10对集合进序列化和反序列化11分析:121.定义一个存储Person对象的ArrayList集合132.往ArrayList集合... 查看详情

javase集合框架——练习题(代码片段)

1.请把学生名与考试分数录入到集合中,并按分数显示前三名成绩学院的名字法(一):利用TreeSet结构+自然排序注意01:CompareTo方法里还要对name进行比较,防止score一样的添加不进去。并且应该“先比较score&... 查看详情

算法导论之2.3-7练习题(代码片段)

题目:给出一个Θ(nlgn)时间的算法。判断在集合S中,是否存在两个元素的和为x。算法导论的教师手册解法如下:1.对集合S排序。2.创建集合T=z:z=x−y,y∈S。3.对集合T排序。4.去除S和T中的重复元素。5.按照从... 查看详情

map集合练习(代码片段)

...个字符出现次数。分析:获取一个字符串对象创建一个Map集合,键代表字符,值代表次数。遍历字符串得到每个字符。判断Map中是否有该键。如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值... 查看详情

妄想集合(牛客练习赛90)(代码片段)

妄想集合(牛客练习赛90)题意:开始有n个可重集合,开始时每一个集合中都有一个数,有m个操作。Quant l r x\\textQuantlrxQuant l r x:往编号在l∼rl\\simrl∼r的每个集合中加入一个数x。Ask l r\\textAsklrAsk l r:询... 查看详情

妄想集合(牛客练习赛90)(代码片段)

妄想集合(牛客练习赛90)题意:开始有n个可重集合,开始时每一个集合中都有一个数,有m个操作。Quant l r x\\textQuantlrxQuant l r x:往编号在l∼rl\\simrl∼r的每个集合中加入一个数x。Ask l r\\textAsklrAsk l r:询... 查看详情

练习:序列化集合(代码片段)

...Stream;23importjava.io.*;4importjava.util.ArrayList;56/*7练习:序列化集合8当我们想在文件中保存多个对象的时候9可以把多个对象存储到一个集合中10对集合进序列化和反序列化11分析:121.定义一个存储Person对象的ArrayList集合132.往ArrayList集合... 查看详情

java自用集合练习题:treeset的自然排序与定制排序(代码片段)

定义一个Employee类。该类包含:private成员变量name,age,birthday,其中birthday为MyDate类的对象;并为每一个属性定义getter,setter方法;并重写toString方法输出name,age,birthday。MyDate类包含:private成员变量year,month,day;并 查看详情

scannerrandomarraylist的基础编程练习题(代码片段)

生成6个1~33之间的随机整数,添加到集合,并遍历packageArrayList;importjava.util.ArrayList;importjava.util.Random;/**思路*6个--->6.fori*1~33之间--->xxx.nextInt(33)+1;*随机整数--->Randomxxx=newRandom();*添加到集合--->ArrayList 查看详情

组合数据类型练习,综合练习(代码片段)

...合数据类型练习:分别定义字符串,列表,元组,字典,集合,并进行遍历。总结列表,元组,字典,集合的联系与区别。  #字符串s=‘examples.‘print(s)foriins:print(i)#列表s=‘thisisastringexamples.‘ls=s.split()print(ls)foriinls:print(i)... 查看详情

java自用集合中使用泛型的练习(代码片段)

...!!!!!!!😐😐集合中使用泛型总结:①集合接口或集合类在jdk5.0时都修改为带泛型的结构。②在实例化集合类时,可以指明具体的泛型类型③指明完以后,在集合类或接口中... 查看详情

一篇文章让你精通:java集合讲解(练习处理)(代码片段)

紧跟上文,相信前面文章让你对集合有一定了解,下面让我们对集合进行案例讲解,让你能够更加了解与使用集合。问题一:找出下面错误的代码,并进行改正packagecom.luo_sf.map;publicclassTextpublicintgutIndexofArray(float[]f)i... 查看详情

2.5.1集合操作(代码片段)

本节内容1,集合操作2,练习题一、集合set类型set数据类型:s=11,22,33特点:1,元素无序且唯一。2,可以存放各种数据类型。3,天生去重。主要作用:1,去重2,关系测试数据:list_1=1,3,4,5,6,7,9list_1=2,6,0,66,22,8,41,构建方法#基于列表... 查看详情

算法导论之2.3-7练习题(代码片段)

题目:给出一个Θ(nlgn)时间的算法。判断在集合S中,是否存在两个元素的和为x。算法导论的教师手册解法如下:1.对集合S排序。2.创建集合T=z:z=x−y,y∈S。3.对集合T排序。4.去除S和T中的重复元素。5.按照从... 查看详情

web前端练习17----es6新语法4,数组,set集合,map集合(代码片段)

一、Array数组百度搜索 mdn 数组https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array1、数组创建//创建数组varfruits=['Apple','Banana','梨子','橘子','桃子& 查看详情