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>() {

			@Override
			public 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;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
	}
	@Override
	public int compareTo(Student o) {
		if(this.getScore()>o.getScore()){
			return -1;
		}else if(this.getScore() < o.getScore()){
			return 1;
		}
		return this.getAge() - o.getAge();
	}
	
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

keepalived+HAProxy+MySQL双主实验

keepalivedHAProxyMySQL双主实验 环境准备 node1(HAProxy1):192.168.184.10 node2(HAProxy2):192.168.184.20 node3(MySQL1):192.168.184.30 node4(MySQL2):192.168.184.40 虚拟IP vip&#xff1a;192.168.184.100MySQL部署 在node3执行以下脚本&#xff1a; #!/bin/bash sy…

智能枪弹柜管理系统-智能枪弹管理系统DW-S306

随着社会的发展和治安形势的日益严峻&#xff0c;对于枪弹的管理变得尤为重要。传统的手工记录和存放方式已经无法满足现代化、高效化、安全化的需求。因此&#xff0c;智能枪弹柜管理系统应运而 生。 在建设万兆主干、千兆终端的监控专网的基础上&#xff0c;弹药库安全技术…

Web性能优化-详细讲解与实用方法-MDN文档学习笔记

Web性能优化 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官网 性能优良的网站能够提高访问者留存和用户满意度&#xff0c;减少客户端和服务器之间传输的数据量可降低各方的成本 不同的业务目标和用户需求需要不同的性能度量&#xff0c;要提高…

LangChain Agent v0.2.0简明教程 (上)

快速入门指南 – LangChain中文网 langchain源码剖析系列课程 九天玩转Langchain! 1. LangChain是什么2. LangChain Expression Language (LCEL)Runnable 接口3. Model I/O3.1 Prompt Templates3.2 Language Model3.3 Output ParsersUse case(Q&A with RAG)1. LangChain…

我的128创作纪念日

目录 学习成长机遇个人数据一览榜单认可日常2024憧憬和规划创作纪念日总结 学习成长机遇 账号创建已经快9年了&#xff0c;以前一直在个人网站和简书上写文章&#xff0c;在CSDN真正写文竟然在2023年10月20&#xff0c;至今才128天&#xff0c;不过获得的数据还算可以&#xff…

力扣细节题:翻转二叉树

细节一&#xff1a;递归采用前序递归 细节二&#xff1a;采用交换节点而不是交换数据因为左右树交换的同时左右树的所有子节点都要交换 细节三&#xff1a;采用外置函数因为return如果在本函数内操作会存在必须返回空指针的问题 /*** Definition for a binary tree node.* s…

【MySQL面试复习】什么是聚簇索引(聚集索引)和非聚簇索引(二级索引)/什么是回表?

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 系列文章目录什么是聚簇索引&#xff08;聚集索引&#xff09…

堆排序、快速排序和归并排序

堆排序、快速排序和归并排序是所有排序中最重要的三个排序&#xff0c;也是难度最大的三个排序&#xff1b;所以本文单独拿这三个排序来讲解 目录 一、堆排序 1.建堆 2.堆排序 二、快速排序 1.思想解析 2.Hoare版找基准 3.挖坑法找基准 4.快速排序的优化 5.快速排序非…

程序媛的mac修炼手册-- 2024如何彻底卸载Python

啊&#xff0c;前段时间因为想尝试chatgpt的API&#xff0c;需要先创建一个python虚拟环境来安装OpenAI Python library. 结果&#xff0c;不出意外的出意外了&#xff0c;安装好OpenAI Python library后&#xff0c;因为身份认证问题&#xff0c;根本就没有获取API key的权限…

opencv基础 python与c++

question: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib Opencv 一、读取图片 (1).imshow Mat imread(const string& filename, intflags1 );flags: enum { /* 8bit, color or not */CV_LOAD_IMAGE_UNCHANGED -1, /* 8bit, gray */CV_LOAD_I…

红队攻防之powershell上线基础免杀(一)

不努力&#xff0c;你背井离乡干嘛&#xff1f;当卧底啊 环境为win10&#xff0c;在哥斯拉生成的webshell下&#xff0c;执行powershell命令。 测试杀毒软件为&#xff1a;火绒&#xff0c;腾讯电脑管家 哥斯拉生成php文件的webshell 如图 哥斯拉进行连接 把要执行命令的文件…

20.scala视图界定

目录 概述实践代码执行 结束 概述 scala 中的视图界定 实践 代码 /*** 视图界定*/ object Genericity03 {def main(args: Array[String]): Unit {println(new MaxInt(1,2).compare)println(new MaxLong(1L,2L).compare)// 不行 // println(new MaxValue(1,2).compare)// …

AD24-PCB尺寸标注、LOGO添加、装配图即多层线路PC输出

一、PCB尺寸标注 1、切换到机械层 2、按shifee进行捕捉切换 按TAB键或空格键进行横向和纵向标注切换 二、LOGO添加 1、放置-图形 2、在空白位置线绘制一个框 3、进行大小调整 三、装配图输出 1、 导出原材料BOM表&#xff0c;不要勾选 顶层 底层 颜色设置 2、输出只有Value值…

NGINX服务器配置实现加密的WebSocket连接WSS协议

一、背景 最近在做小程序开发&#xff0c;需要在nginx中配置websocket加密模式&#xff0c;即wss。初次配置wss时&#xff0c;踩了两个小时的坑&#xff0c;本文将踩坑过程分享给大家&#xff0c;有需要用到的伙伴可以直接copy即可实现&#xff0c;节省宝贵时间。 二、WebSo…

Redis可以让数据不丢失吗

Redis作为一款备受青睐的开源内存数据存储系统&#xff0c;拥有诸多引人注目的主要特点&#xff0c;为各种应用场景提供了高性能、灵活多用途的解决方案。本文将详细介绍Redis的主要特点&#xff0c;并探讨其在现代应用开发中的重要作用。 首先&#xff0c;Redis以其卓越的性能…

高等数学(函数)

目录 一、函数的定义 二、几种函数 2.1 分段函数 2.2 反函数 2.3 显函数与隐函数 显函数 隐函数 三、几种特性 3.1 奇偶性 偶函数 奇函数 3.2 周期性 3.3 单调性 一、函数的定义 其中x是自变量&#xff0c;y是因变量。 二、几种函数 2.1 分段函数 2.2 反函数 ——…

Qt MDI应用方法:QMdiArea和QMdiSubWindows类

重点&#xff1a; 1.使用MDI应用程序&#xff0c;需要在主窗口的工作区放置一个QMdiArea组件。 并将QMdiArea组件设置成中心窗口 2.MDI有两个显示模式&#xff1a;Tab多页显示模式和子窗口显示模式 子窗口显示模式有两种显示方法&#xff1a;窗口级联展开和平铺展开 窗口级联…

仿12306校招项目业务二(列车检索)

目录 验证数据 加载城市数据 查询列车站点信息 查询列车余票信息 构建列车返回数据 12306 项目中列车数据检索接口路径 &#xfeff; TicketController的pageListTicketQuery&#xfeff;。 GetMapping("/api/ticket-service/ticket/query")public Result<T…

电商评价分析:NLP信息抽取技术在用户评论中的应用与挖掘

一、引言 在2019年&#xff0c;电子商务的蓬勃发展不仅推动了消费市场的增长&#xff0c;也带来了海量的用户评价数据。这些数据&#xff0c;作为消费者对商品和服务直接反馈的载体&#xff0c;蕴含着巨大的价值。然而&#xff0c;由于其非结构化的特性&#xff0c;这些文本信息…

蓝桥云课-第6场小白赛

第一题&#xff1a;输出字符串即可 第二题2.猜灯谜【算法赛】 - 蓝桥云课 (lanqiao.cn)&#xff1a; 猜灯谜 也就是输入自己前后值的总和&#xff0c;除去第一个和最后一个&#xff08;单独输出&#xff09; c代码如下&#xff1a; #include <iostream> using namesp…