JAVA抽奖算法
来源:互联网 发布:电子显微镜原理 知乎 编辑:程序博客网 时间:2024/05/17 03:16
最近因项目需要,设计抽奖功能,在网上学习了很多前辈的思路,但感觉跟项目需求有偏差,因此按业务逻辑重新设计了一下。
东西很Low,但好歹是个成果,希望拿出来和大家分享,也希望大家提出批评,我喜欢在学习中进步的感觉。
奖项设置:
一等奖(1名)、二等奖(3名)、三等奖(5名)、四等奖(50名);
抽奖规则:
用户通过其他任务获得抽奖资格,然后进入抽奖页面点击抽奖,抽中相应奖项后发送通知。
设计思路:
1.建立奖池,包含所有奖项和一定数量的未中奖选项,奖池内选项需是随机排序;
2.生成随机数,范围和奖池长度相同;
3.从奖池内随机抽取一个下标,将随机数和下标进行对比,相同则进入奖池;
4.进入奖池后,根据该下标找值,并做出相应判断。
以下是代码,自我感觉逻辑很乱,不够简便高效,本文章说是分享有点给自己贴金了,其实就是想大家求教.
package test;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.Random;/** * @anntion 抽奖算法测试类 * @author nick * @date 2016年5月22日 */public class LottyTest {public static void main(String[] args) {ruanTime();}// 抽奖算法public static void getlottery(List<String> uList) {// 生成随机数Random random = new Random();// 模拟抽奖,预设10万次,抽中即停for (int i = 0; i < 100000; i++) {System.out.println("第" + i + "次抽奖");// 抽取0到9999中任意一个整数随机数;int randNum = random.nextInt(9999);// 从奖池里随机抽取一个下标int jackNum = (int) (Math.random() * uList.size());System.out.println(randNum + "==" + jackNum);//如果随机数和奖池里随机抽取的下标相同,进入奖池if (randNum == jackNum) {System.out.println("如果匹配:");//获取抽到的奖池内的选项值String jackName = uList.get(jackNum);//如果是一等奖,通知用户中奖,删除奖池内该选项,并跳出抽奖if (jackName == "一等奖") {System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println(jackName);System.out.println("恭喜您获得一等奖!");// 如果中奖,将奖项从奖池删除uList.remove(jackNum);break;} else if (jackName == "二等奖") {//如果是二等奖,通知用户中奖,删除奖池内该选项,并跳出抽奖System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println(jackName);System.out.println("恭喜您获得二等奖!");// 如果中奖,将奖项从奖池删除uList.remove(jackNum);break;} else if (jackName == "三等奖") {//如果是三等奖,通知用户中奖,删除奖池内该选项,并跳出抽奖System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println(jackName);System.out.println("恭喜您获得三等奖!");// 如果中奖,将奖项从奖池删除uList.remove(jackNum);break;} else if (jackName == "四等奖") {//如果是四等奖,通知用户中奖,删除奖池内该选项,并跳出抽奖System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println(jackName);System.out.println("恭喜您获得四等奖!");// 如果中奖,将奖项从奖池删除uList.remove(jackNum);break;} else if (jackName == "未中奖") {//如果是未中奖,通知用户未中奖,删除奖池内该选项,并跳出抽奖System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println(jackName);System.out.println("很遗憾您未中奖!");// 如果中奖,将奖项从奖池删除uList.remove(jackNum);break;}} else {System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println("如果未中奖:");System.out.println("很遗憾,您没中奖!");}}String[] bbbbbbb = uList.toArray(new String[0]);System.out.println("----------------------------我是可爱的分割线----------------------------");System.out.println("奖池情况:");System.out.println("++++++++++++++++++++++++++++++++:" + Arrays.toString(bbbbbbb));System.out.println("++++++++++++++++++++++++++++++++" + bbbbbbb.length);System.out.println("++++++++++++++++++++++++++++++++");}// 拼接奖池public static List<String> getJackpot() {// 数组1,包含1个一等奖、3个二等奖、5个三等奖,共9个String[] lottery1 = { "一等奖", "二等奖", "二等奖", "二等奖", "三等奖", "三等奖", "三等奖", "三等奖", "三等奖" };// 数组2,四等奖,共50个String[] lottery2 = new String[50];// 数组3,未中奖,共9940个String[] lottery3 = new String[9940];// 给数组2,四等奖赋值for (int i = 0; i < 50; i++) {lottery2[i] = "四等奖";}// 给数组3,未中奖赋值for (int i = 0; i < 9940; i++) {lottery3[i] = "未中奖";}// 创建个list,将三个数组添加到一个list中,拼接起来List<String> list = new ArrayList<String>();// 遍历数组1,并将值添加到listfor (String s : lottery1) {list.add(s);}// 遍历数组2,并将值添加到listfor (String s : lottery2) {list.add(s);}// 遍历数组3,并将值添加到listfor (String s : lottery3) {list.add(s);}// 给list中的值随机排序Collections.shuffle(list);// 返回一个无序的list奖池return list;}// 方法耗时测试public static void ruanTime() {long start = System.currentTimeMillis();List<String> jackpotList = getJackpot();for (int i = 0; i < 1; i++) {getJackpot();System.out.println("拼接奖池耗时:" + (System.currentTimeMillis() - start) + "毫秒");}for (int i = 0; i < 1; i++) {getlottery(jackpotList);System.out.println("抽奖算法耗时:" + (System.currentTimeMillis() - start) + "毫秒");}}}
1 0
- Java 抽奖算法
- Java 抽奖算法
- JAVA抽奖算法
- java抽奖算法
- java抽奖算法
- java抽奖算法
- JAVA大转盘抽奖算法
- Java实现游戏抽奖算法
- JAVA 两个简单的抽奖算法
- java版根据权重抽奖算法
- 抽奖算法 - 幸运大转盘 - java
- 抽奖 算法
- 抽奖算法
- 抽奖算法
- 抽奖-算法
- 抽奖算法
- java 抽奖
- C#&PHP&Java实现Alias Method概率抽奖算法
- 输入输出流
- IO学习(十八)两个图总结常用javaIO流
- An internal error occurred during: "Launching FarmeWork on MyEclipse Tomcat". java.lang.NullPointerE
- 漫谈人机交互
- JAVA基础之等待/唤醒机制
- JAVA抽奖算法
- 简单排序--选择、冒泡、插入
- 笔试练习五
- eclipse集成aptana插件
- Java开发中的23种设计模式详解(转)
- 原码、反码和补码
- XOJ测试 2016.5.22
- JAVA基础之设计模式
- 自制模态框和关于z-index的知识