day16_ListSet课后练习题 - 参考答案

文章目录

  • day16_课后练习题
    • 第1题
    • 第2题
    • 第3题
    • 第4题
    • 第5题
    • 第6题
    • 第7题
    • 第8题

day16_课后练习题

第1题

案例:

​ 1、用一个String[]数组存点数

​ 2、用一个String[]数组存花色

​ 3、用一个String[]数组存大王、小王

​ 4、用上面的数组,生成一副扑克牌

​ 5、遍历显示全副扑克牌

​ 6、模拟给4个人随机发牌,每个人11张牌

​ 7、显示每个人的牌和剩余的牌

​ 效果如下:

在这里插入图片描述

package com.atguigu.test01;import java.util.ArrayList;
import java.util.Random;public class Test01 {public static void main(String[] args) {String[] dian = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};String[] hua = {"黑桃","红桃","方片","梅花"};String[] wang = {"大王","小王"};ArrayList<String> list = new ArrayList<String>();for (int i = 0; i < dian.length; i++) {for (int j = 0; j < hua.length; j++) {list.add(hua[j]+dian[i]);}}for (int i = 0; i < wang.length; i++) {list.add(wang[i]);}for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+"  ");if((i+1)%10==0){System.out.println();}}System.out.println();System.out.println("发牌:");Random rand = new Random();ArrayList<String> one = new ArrayList<String>();for (int i = 0; i < 11; i++) {one.add(list.remove(rand.nextInt(list.size())));}ArrayList<String> two = new ArrayList<String>();for (int i = 0; i < 11; i++) {two.add(list.remove(rand.nextInt(list.size())));}ArrayList<String> three = new ArrayList<String>();for (int i = 0; i < 11; i++) {three.add(list.remove(rand.nextInt(list.size())));}ArrayList<String> four = new ArrayList<String>();for (int i = 0; i < 11; i++) {four.add(list.remove(rand.nextInt(list.size())));}System.out.println("第1个人:" + one);System.out.println("第2个人:" + two);System.out.println("第3个人:" + three);System.out.println("第4个人:" + four);System.out.println("剩余:" + list);}
}

第2题

  • 模拟乐透号码。

    • 随机生成10个号码放到集合中,范围1-50,作为乐透号码。不能重复。
    • 键盘录入10个整数放到集合中,范围1-50,不能重复。
    • 录入的整数与乐透号码对比,统计猜中了几个。
  • 代码实现,效果如图所示:

    在这里插入图片描述

开发提示:

  • 当使用集合时,可以通过contains方法,判断某集合中是否包含某元素
package com.atguigu.test02;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class Test02 {public static void main(String[] args) {ArrayList<Integer> lotNumList = lotNum();System.out.println("乐透号码已经生成,游戏开始:");ArrayList<Integer> inputList = inputNum();System.out.println("您输入的号码为:"+inputList);int count  =  countNum(inputList , lotNumList);System.out.println("乐透号码为:"+lotNumList);System.out.println("猜中了:"+count+"个数字");}public static int countNum(ArrayList<Integer> inputList, ArrayList<Integer> lotNumList) {int  count  = 0;for (int i = 0; i < inputList.size(); i++) {Object num  = inputList.get(i);if (lotNumList.contains(num)){count++;}}return count ;}public static ArrayList<Integer> inputNum(){ArrayList<Integer> list = new ArrayList<Integer>();Scanner sc = new Scanner(System.in);for (int i = 0; i < 10; ) {System.out.println("请输入第"+(i+1)+"个数字[1-50]:");int num  = sc.nextInt();if (num >=1 && num<=50 && !list.contains(num)){list.add(num);i++;}else{System.out.println(num+"超过[1-50]范围或重复录入,数字无效,请重新输入");}}sc.close();return list;}public static ArrayList<Integer> lotNum(){ArrayList<Integer> list = new ArrayList<Integer>();Random r = new Random();for (int i = 0; i < 10; ) {int num  = r.nextInt(50) + 1;if (!list.contains(num)){list.add(num);i++;}}return list;}
}

第3题

案例:

​ 1、随机生成10个[1,100]之间的整数,放到List集合中,遍历显示

​ 2、找出前3名最大值,删除它们,注意可能重复

​ 3、显示删除后的结果

​ 效果如下:

在这里插入图片描述

package com.atguigu.test03;import java.util.ArrayList;
import java.util.Random;public class Test03 {public static void main(String[] args) {ArrayList<Integer> nums = getNum();System.out.println("10个随机值:" + nums);ArrayList<Integer> maxList = getTop3(nums);System.out.println("前3个最大的:" + maxList);System.out.println("删除后:" + nums);}public static ArrayList<Integer> getNum() {ArrayList<Integer> list = new ArrayList<Integer>();Random r = new Random();for (int i = 0; i < 10; i++) {int n = r.nextInt(100) + 1;list.add(n);}return list;}public static ArrayList<Integer> getTop3(ArrayList<Integer> list){ArrayList<Integer> maxList = new ArrayList<Integer>();for (int i = 0; i < 3; i++) {Integer max = (Integer) list.get(0);for (int j = 0; j < list.size(); j++) {Integer num = (Integer) list.get(j);if(max < num){max = num;}}maxList.add(max);while(list.contains(max)){list.remove(max);}}return maxList;}}

第4题

  • 随机生成30个数,范围2-100,获取其中的质数。
  • 代码实现,效果如图所示:

在这里插入图片描述

开发提示:

  • 质数:在一个大于1的整数中,除了1和此整数自身外,没法被其他自然数整除的数。
package com.atguigu.test04;import java.util.ArrayList;
import java.util.Random;public class Test04 {public static void main(String[] args) {ArrayList<Integer> ranNum = getRanNum();System.out.println("随机数为:");System.out.println(ranNum);System.out.println("其中的质数为:");ArrayList<Integer> pNum = getPNum(ranNum);System.out.println(pNum);}public static ArrayList<Integer> getPNum(ArrayList<Integer> ranNum) {ArrayList<Integer> list = new ArrayList<Integer>();for (int i = 0; i < ranNum.size(); i++) {Integer integer = (Integer) ranNum.get(i);if (isP(integer)) {list.add(integer);}}return list;}public static ArrayList<Integer> getRanNum() {Random random = new Random();ArrayList<Integer> list = new ArrayList<Integer>();for (int i = 0; i < 30; i++) {list.add(random.nextInt(99) + 2);}return list;}public static boolean isP(int n) {boolean isPrime = true;for (int i = 2; i < n; i++) {if (n % i == 0) {isPrime = false;break;}}return isPrime;}
}

第5题

案例:

​ 1、请定义方法public static int listTest(Collection list,String s)统计集合中指定元素出现的次数

​ 2、创建集合,集合存放随机生成的30个小写字母

​ 3、用listTest统计,某些元素的出现次数

​ 4、效果如下在这里插入图片描述

package com.atguigu.test05;import java.util.ArrayList;
import java.util.Collection;
import java.util.Random;public class Test05 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();Random rand = new Random();for (int i = 0; i < 30; i++) {list.add((char)(rand.nextInt(26)+97)+"");}System.out.println(list);System.out.println("a:"+listTest(list, "a"));	System.out.println("b:"+listTest(list, "b"));	System.out.println("c:"+listTest(list, "c"));System.out.println("x:"+listTest(list, "x"));	}public static int listTest(Collection<String> list, String string) {int count = 0;for (String object : list) {if(string.equals(object)){count++;}}return count;}
}

第6题

案例:键盘录入一个字符串,去掉其中重复字符,打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。效果如图:

在这里插入图片描述

提示:LinkedHashSet的使用

package com.atguigu.test06;import java.util.LinkedHashSet;
import java.util.Scanner;public class Test06 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print("请输入一串字母:");String str = input.nextLine();System.out.println("str=" + str);LinkedHashSet<Character> set = new LinkedHashSet<Character>();for (int i = 0; i < str.length(); i++) {set.add(str.charAt(i));}System.out.print("去重后:");String result = "";for (Character object : set) {result += object;}System.out.println(result);}
}

第7题

案例:双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码不重复)

在这里插入图片描述

开发提示:可以使用TreeSet和ArrayList结合

package com.atguigu.test07;import java.util.ArrayList;
import java.util.Random;
import java.util.TreeSet;public class Test07 {public static void main(String[] args) {TreeSet<Integer> red = new TreeSet<Integer>();Random rand = new Random();while(red.size()<6){red.add(rand.nextInt(33)+1);}ArrayList<Integer> list = new ArrayList<Integer>();list.addAll(red);list.add(rand.nextInt(16)+1);//蓝色号码System.out.println("双色球所有号码:" + list);System.out.print("红色号码:");for (int i = 0; i < list.size()-1; i++) {System.out.print(list.get(i)+" ");}System.out.println("蓝色号码:" + list.get(list.size()-1));}
}

第8题

案例:有如下四个学生的成绩:

在这里插入图片描述

(1)用Comparable接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。

(2)用Comparator实现按照姓名排序

(3)效果如下

在这里插入图片描述

package com.atguigu.test08;import java.util.Comparator;
import java.util.TreeSet;public class Test08 {public static void main(String[] args) {System.out.println("按照成绩和年龄排序:");TreeSet<Student> set = new TreeSet<Student>();set.add(new Student("liusan",20,90.0));set.add(new Student("lisi",22,90.0));set.add(new Student("wangwu",20,99.0));set.add(new Student("sunliu",22,100.0));for (Object object : set) {System.out.println(object);}System.out.println("按照姓名排序:");TreeSet<Student> all = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o1.getName().compareTo(o2.getName());}});for (Student object : set) {all.add(object);}for (Student object : all) {System.out.println(object);}}
}
class Student implements Comparable<Student>{private String name;private int age;private double score;public Student(String name, int age, double score) {super();this.name = name;this.age = age;this.score = score;}public Student() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";}@Overridepublic int compareTo(Student o) {if(this.getScore()>o.getScore()){return -1;}else if(this.getScore() < o.getScore()){return 1;}return this.getAge() - o.getAge();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3分钟看懂设计模式01:策略模式

一、什么是策略模式 定义一些列算法类&#xff0c;将每一个算法封装起来&#xff0c;并让它们可以互相替换。 策略模式让算法独立于使用它的客户而变化&#xff0c;是一种对象行为型模式。 以上是策略模式的一般定义&#xff0c;属于是课本内容。 在没有真正理解策略模式之…

前-中-中-中-后-《软件方法》自测题解析41

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《软件方法》第6章自测题1 7 [ 单选题 ] 以下用例规约主要违反了书写用例规约的什么要点&#xff1f; 1. 市民向前台系统请求即时查询话费 2. 前台系统向后台系统发送查询请求 3.…

超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)

超市售货管理小程序目录 目录 基于微信小程序的超市售货管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;商品管理 &#xff08;2&#xff09;出入库管理 &#xff08;3&#xff09;公告管理 …

【AI工具】一键换装 开源代码分享

这个基于Diffusion模型的虚拟试衣系统OOTDiffusion确实展现出了巨大的市场潜力。通过允许用户上传自己的照片和衣物,实现虚拟混合,该系统能够满足用户在C端对个性化试衣的需求,类似于“衣服版妙鸭相机”的概念。 以下是对该系统进一步的分析和建议: 技术框架与定位 技术框…

LeetCode LCR 055.二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…

Clickhouse系列之连接工具连接、数据类型和数据库

基本操作 一、使用连接工具连接二、数据类型1、数字类型IntFloatDecimal 2、字符串类型StringFixedStringUUID 3、时间类型DateTimeDateTime64Date 4、复合类型ArrayEnum 5、特殊类型Nullable 三、数据库 一、使用连接工具连接 上一篇介绍了clickhouse的命令行登录&#xff0c…

Android约束布局中用ConstraintHelper实现过渡动画效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一.创建一个类CircularRevealHelper继承ConstraintHelper代码如下 /*** Author: ly* Da…

【学习iOS高质量开发】——协议与分类

文章目录 一、通过委托与数据源协议进行对象间通信1.委托模式2.要点 二、将类的实现代码分散到便于管理的数个分类之中1.如何实现2.要点 三、总是为第三方类的分类名称加前缀1.为什么总是为第三方类的分类名称加前缀2.要点 三、勿在分类中声明属性1.勿在分类中声明属性的原因2.…

解决前端跨团队统一的隐性拦路虎

前言 春节刚归来&#xff0c;我们不搞那么烧脑&#xff0c;先来一篇浅显易懂的文章&#xff0c;期望给大家带来一些新的解题思路。 背景 过去多年无论是一款插件推广&#xff0c;还是组件库统一&#xff0c;无论是一次机制流程制定&#xff0c;还是前端工程化体系建设&#xff…

【进程创建】

目录 进程创建的方式查看进程pid 调用系统调用创建子进程fock函数做了的工作子进程刚开始创建的状态 一个变量&#xff0c;两个不同的值创建子进程的作用 进程创建的方式 1.在操作系统上输入的指令。 2.已经启动的软件。 3.程序员在代码层面上调用系统调用创建进程。 linux中第…

开开开开开,干

大家新年快乐&#xff0c;开工啦啦啦啦 其实每天很多人都会问&#xff1a; 有协同过滤的算法吗&#xff0c;有的&#xff0c;可以给你解释原理… 有的小伙伴只开了一部分逻辑&#xff0c;我要实现用户可以下单功能 但是细细考虑下单&#xff0c;需要现有用户&#xff0c;维护…