1.设计一个抽奖程序,程序通过随机方式产生中奖序号。程序可以设置序号包含数字位数 和最大序号,一次抽取几个中奖序号(最少 1 个序号,最多不超过 2 个序号)和总共中奖 人数(最少 5 人)。抽奖过程
实验目的 掌握随机函数的使用
主要仪器设备及耗材 安装了 JDK1.8 的 PC 一台
实验内容
1.设计一个抽奖程序,程序通过随机方式产生中奖序号。程序可以设置序号包含数字位数 和最大序号,一次抽取几个中奖序号(最少 1 个序号,最多不超过 2 个序号)和总共中奖 人数(最少 5 人)。抽奖过程分多轮进行,最后现实出所有的中奖的序号。
解题思路:说实话题目开始我没很明白,看了好一会。下面开始解读题目要求:
程序通过随机方式产生中奖序号:要用到Random随机函数。
程序可以设置序号包含数字位数 和 最大序号:
【设置数字位数:该随机数可以设置为1位、2位、3位·······,用户自定义输入设置随机数位数。不过考虑到用int类型存储,调用Integer.MAX_VALUE可以知道int最大值是2147483647,是一个10位的数字,因此数字位数最多10位,至少1位】
【最大序号:该最大序号不能超过设定的随机位数的最大值,比如2位数的随机数,那么最大序号不能大于99,只能是10到99】
一次抽取几个中奖序号(最少 1 个序号,最多不超过 2 个序号)和总共中奖 人数(最少 5 人):我认为这句话的理解是难点,我的理解是,一次抽取n(n是1或者2)个中奖序号,就是这n个序号就是中奖序号,如果生成的随机数等于设置的中奖序号,那么就中奖。设置总共中奖人数m(m≥5)个,也就是当生成的随机数中出现m个满足中奖序号的随机数,则停止生成。
(有不同理解题目的同学还请多多指点,欢迎在下方评论留言)
下面开始写题:
package com.temp;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Scanner;/*** @Author lanxiaofang* @email 983770299@qq.com* @date 2020/10/26 8:14*/public class LuckDrawBox {public static void main(String[] args) throws Exception{Random random = new Random();Scanner scanner = new Scanner(System.in);System.out.println("----请问程序包含数字位数是:");int num_cnt = scanner.nextInt();int num_digit = (int)Math.pow(10, num_cnt);if(num_cnt <= 10 && num_cnt >0) {System.out.println("----请问数字最大序号是:");int max_num = scanner.nextInt();if(max_num >= num_digit) {System.out.println("----数字最大序号要求小于" + num_digit);} /*这一段用不到,因为系统会自动报错* else if(max_num > Integer.MAX_VALUE) { System.out.println("----数字最大序号要求小于" +* Integer.MAX_VALUE); }*/else {System.out.println("----请问您需要设置几个中奖序号,以空格隔开(最少 1 个序号,最多不超过 2 个序号)?");int listLength = scanner.nextInt();if(listLength == 1 || listLength == 2) {int[] winList = new int[listLength+1];BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));for(int i=0; i<listLength; i++) {System.out.println("请输入第"+(i+1)+"个中奖序号");winList[i] = Integer.parseInt(bufferedReader.readLine());System.out.println("----您输入的中奖序号有:"+winList[i]);}System.out.println("----请问总共中奖人数是:");int sum_winner_cnt = scanner.nextInt();if(sum_winner_cnt>=5) {int winner_cnt = 0, random_cnt = 0;while(winner_cnt < sum_winner_cnt) {int randomNum = random.nextInt(max_num);//生成一个不超过max_num的随机值//生成num_cnt位的随机值,就是生成一个小于num_digit的数,当随机数小于num_digit/10时,加上num_digit/10来确保位数 //比如生成一个4位数的随机值,那么就是生成一个小于10000(最大9999)的随机整数,当随机数小于1000时,加上1000,来确保位数。if(randomNum < num_digit/10) { randomNum += num_digit/10;}System.out.println("----这是第"+ ++random_cnt +"次抽奖,生成的随机数是"+randomNum);for(int i : winList) {if(i==randomNum) {++winner_cnt;System.out.println("****第"+winner_cnt+"个中奖的人:"+"第"+random_cnt+"个人中奖啦");}} }}else {System.out.println("----总共中奖人数(最少 5 人)");}bufferedReader.close();}else {System.out.println("----最少 1 个序号,最多不超过 2 个序号");}}}else {System.out.println("您需要的数字位数太长");} }
}
结果:
1.设计一个抽奖程序,程序通过随机方式产生中奖序号。程序可以设置序号包含数字位数 和最大序号,一次抽取几个中奖序号(最少 1 个序号,最多不超过 2 个序号)和总共中奖 人数(最少 5 人)。抽奖过程相关推荐
- 密码生成器c语言程序,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include #include #include ...
- *1.设计一个异常类表示对负数求平方根的错误,在类Test的main方法中,* 从键盘中输入一个数字,若输入的数不小于0,则输出该数的平方根(用Math.sprt());* 若小于0,则抛出自定义
/* *1.设计一个异常类表示对负数求平方根的错误,在类Test的main方法中, * 从键盘中输入一个数字,若输入的数不小于0,则输出该数的平方根(用Math.sprt()): * 若小于0,则抛出 ...
- c语言中定义密码为英文字母,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include #include #include ...
- 四位密码器c语言编程,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include #include #include ...
- 微信小程序页面跳转方式+跳转小程序(直接复制代码可用)
一. 微信小程序跳转页面方法 1.跳转到 tabBar 页面 wx.switchTab({url: '/index' }) 2.跳转到其他页面(非tabBar页) //redirectTo方法(会关闭 ...
- Python,设计一个游戏,游戏会随机数字,让你猜。
- Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出
10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...
- 运行python程序的两种方式交互式和文件式_执行Python程序的两种方式
交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口数据就消失了. 命令行式(了解) 打开文本编辑器,在文本编辑器中写入一串字符. ...
- C++ 设计一个CStudent(学生)类,用链表实现
1.设计一个CStudent(学生)类,并使CStudent类具有以下特点: a.有学生姓名.学号.程序设计.信号处理.数据结构三门课程的成绩: b.全部信息由键盘输入: c.通过成员函数统计学生平均 ...
最新文章
- pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )
- shader 编程入门(一)
- php soap实例讲解
- MySQL基本分区表
- Linux 查看系统硬件信息
- 小菜鸟一步步打造图书馆外挂之十三:用户编辑界面的实现
- 递归,递推,记忆化搜索,空间优化(数字三角形)
- SOJ 4482 忽悠大神【最小生成树】
- C++定义一个对象和new一个对象的区别与联系
- 计算机网络应用层和传输层及网络层协议有哪些
- 盘点百度开放云编程马拉松八大亮点
- 流媒体后视镜前装搭载小幅下滑,远峰与镜泰排位争夺白热化
- Pandas RuntimeWarning: More than 20 figures have been opened. Figures created plt.close()也不起作用
- OpenPower基金会和联盟是什么?
- android+主流品牌手机,10大手机品牌共建Android联军 代表机型一览
- Android https 自签名和CA证书验证(基于OkHttp)
- 微信加密聊天工具(持续开发中)
- java excel 列_Java 删除Excel中的行和列
- 计算机网络-传输层:TCP协议
- Vue中的过滤器(管道)
热门文章
- “锄禾日当午”中,锄禾是谁,当午又是谁,锄禾为什么要日当午
- Typora 修改块代码的颜色
- 【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块3
- jsp源码审计的积累
- java dom4j 查找_java dom4j根据条件读取查找xml节点的方法
- 企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制)
- MDK中hex转BIN文件生成
- 临床检验基础知识点汇总
- 计算机更新bios,如何更新计算机的BIOS | MOS86
- 7-1 有重复的数据I (20 分)