一、题目:
抽奖,分别有{2,588,888,1000,10000}五个奖金。
请使用代码模拟抽奖,打印出每个奖项。奖项的出现顺序要随机且不重复。
打印效果如下:可随机顺序。
888元的奖金被抽出。
588元的奖金被抽出。
10000元的奖金被抽出。
1000元的奖金被抽出。
2元的奖金被抽出。

二、重难点:
1)两种思路。
2)索引移动的时机。

♥第一种实现方式:新建一个数组,放置随机抽取后对比不重复的奖金数据。

import java.util.Random;public class LotteryArrayMethod {/** 抽奖,分别有{2,588,888,1000,10000}五个奖金。* 请使用代码模拟抽奖,打印出每个奖项。奖项的出现顺序要随机且不重复。* 打印效果如下:可随机顺序。* 888元的奖金被抽出。* 588元的奖金被抽出。* 10000元的奖金被抽出。* 1000元的奖金被抽出。* 2元的奖金被抽出。* */public static void main(String[] args) {//第一种实现方式:新建一个数组,放置随机抽取后对比不重复的奖金数据。//1)定义数组表示奖池int[] lotteryArr = {2, 588, 888, 1000, 10000};//2)定义新数组用于存储抽奖的结果int[] lotteryResult = new int[lotteryArr.length];//3)抽奖Random r = new Random();//从奖池里抽5个奖for (int i = 0; i < 5; ) {int randomIndex = r.nextInt(lotteryArr.length);//根据随机索引随机抽取奖池里的奖金int outcome = lotteryArr[randomIndex];boolean flag = outcomeInLotteryResult(lotteryResult, outcome);//如果没有抽中过,把当前奖项添加到已抽取的结果数组中if (!flag) {lotteryResult[i] = outcome;//★★★★★只有添加至结果数组中,才移动索引i++;}}//4)遍历打印出抽奖结果for (int i = 0; i < lotteryResult.length; i++) {System.out.println(lotteryResult[i] + "元的奖金被抽出");}}//判断抽出结果outcome在抽奖结果数组lotteryResult里是否存在,存在则为true。public static boolean outcomeInLotteryResult(int[] lotteryResult, int outcome) {for (int i = 0; i < lotteryResult.length; i++) {if (lotteryResult[i] == outcome) {return true;}}return false;}
}

♥第二种方式:打乱顺序。

import java.util.Random;public class LotteryDisruptMethod {/** 抽奖,分别有{2,588,888,1000,10000}五个奖金。* 请使用代码模拟抽奖,打印出每个奖项。奖项的出现顺序要随机且不重复。* 打印效果如下:可随机顺序。* 888元的奖金被抽出。* 588元的奖金被抽出。* 10000元的奖金被抽出。* 1000元的奖金被抽出。* 2元的奖金被抽出。* *///第二种方式:打乱顺序。public static void main(String[] args) {//1)打乱奖池数组里的所有数据int[] arr = {2, 588, 888, 1000, 10000};Random r = new Random();for (int i = 0; i < arr.length; i++) {//获取随机索引int randomIndex = r.nextInt(arr.length);//让遍历的值与随机索引的值交换int temp = arr[i];arr[i] = arr[randomIndex];arr[randomIndex] = temp;}//2)遍历奖池for (int i = 0; i < arr.length; i++) {System.out.println(arr[i] + "元的奖金被抽出。");}}}

Java_题目_抽奖的2种实现方法相关推荐

  1. java中奖率算法_抽奖概率-三种算法

    一.逢"几"中奖 逢"几"中奖,即通过预估抽奖人数和奖品数来判断,"几"=(抽奖人数/奖品数)*N.这是一种最简单抽奖算法,适合抽奖人数众多 ...

  2. 弱加密算法有哪几种_常见的几种加密方法

    常见的几种加密方法和实 常见的几种加密方法 : MD5 SHA1 RSA AES DES 1.MD5加密 是HASH算法一种. 是生成32位的数字字母混合码. MD5主要特点是 不可逆 MD5算法还具 ...

  3. 墙面有几种装修方法_外墙有几种装修方法

    房屋的外墙装修不只起着保护作用,更起着装饰作用.那外墙有几种装修方法?今日就由PChouse为你一一解答. 1.涂抹涂料 这是大家最为常用的,这些外墙涂料一般有钙塑涂料.JH801涂料.仿瓷涂料.彩花 ...

  4. 墙面有几种装修方法_墙面有几种装修方法

    墙面装饰的方法比较多,个人可以根据想要的风格和预算,挑选适合自家的装饰材料,不过也要注意装修细节,避免影响使用.那么墙面有几种装修方法,以及墙面装饰需要注意什么,各位是否了解呢.现在我们一起来看看吧. ...

  5. 熔化焊包括哪五种_常用的几种熔焊方法

    熔焊,是指焊接过程中,将焊接接头在高温等的作用下至熔化状态.由于被焊工件是紧密贴在一起的,在温度场.重力等的作用下,不加压力,两个工件熔化的融液会发生混合现象.待温度降低后,熔化部分凝结,两个工件就被 ...

  6. 四个人过桥的题目_云南的几种“勾魂”特产,舌尖上的美味,让人回味无穷,你吃过吗...

    云南,彩云之南,说到云南美食,大家可能第一反应都是"米线呀!"害!大云南的美食可多了,你可不能只知道这一个,号称花城的云南,这里的美食也是"遍地开花". 过桥米 ...

  7. Java_题目_面向对象文字花钱格斗游戏

    一.题目:面向对象文字花钱格斗游戏 二.重难点: 1)掌握JavaBean的写法,及相关快捷键或插件生成. 包含缺省及含参构造器.getter和setter.成员方法等. 2)掌握创建对象.方法后的栈 ...

  8. Java_题目_身份证号码信息查看

    一.题目: 身份证信息查看:321281202201011234 ->打印: 人物信息为: 出生年月日:2022年01月01日 性别为:男 二.重难点: 1.2位:省份 3.4位:城市 5.6位 ...

  9. linux修改文件内容_详解5种实用方法---Linux系统清空或删除大文件内容

    概述 有时我们在处理Linux终端中的文件时,可能要去清除文件的内容,而无需使用任何Linux命令行编辑器打开它.怎么才能实现呢?下面通过几种不同的方式教大家清空文件内容. 1.通过重定向到空来清空文 ...

最新文章

  1. 程序员眼中的电脑和空调 | 每日趣闻
  2. oracle 基础1
  3. Oracle FGA审计记录的清理步骤
  4. Md5 Md5实现原理
  5. 优化android studio编译的apk大小
  6. LeetCode 1944. 队列中可以看到的人数(单调栈)
  7. 我的YUV播放器MFC小笔记:unicode编码、宽字符
  8. HDU4628+状态压缩DP
  9. KMP算法的C++实现
  10. ajax 网络延迟 异步,利用 jQuery 的 Ajax 来实现检查网络延迟多少秒
  11. Java面向对象(一)20170517
  12. 安卓udp发包工具_网络发包工具_xcap网络发包工具免费版V1.0.2下载(暂未上线)_预约_飞翔下载...
  13. jmeter访问网址
  14. 一文读懂大比例尺地形图测绘
  15. Photoshop CS6 破解
  16. 当深度学习遇见自动文本摘要
  17. AWT:实现简单的java计算器
  18. 机器学习-凸优化理论-课堂笔记
  19. (转贴)汉字转拼音缩写
  20. 带你开发个转盘抽奖小游戏【附源码】

热门文章

  1. 【微软 Azure 认知服务】零基础搭建微软 Azure AI 认知服务实验分享
  2. Unity 面积测量
  3. 中国房地产泡沫规模巨大将载入历史 面临崩溃风险
  4. 企业邮箱适用于哪些行业?公司邮箱都用什么?
  5. HTML+CSS 仿写京东网站界面
  6. 用微信小程序加市面上的网络摄像头实现视频会议
  7. pta 7-20 xrf的镜子碎了?
  8. 编译出现错误:incomplete type ‘WebsocketSession’ used in nested name specifier。
  9. AR(增强现实)开发资源汇总
  10. 51CTO.com 巅峰访谈:让远程接入访问变得更简单 更高效