java实现的根据概率随机中奖测试类

本文实例讲述了java实现的根据概率随机中奖测试类。分享给大家供大家参考,具体如下:

最近要做一个宝箱抽奖的功能 自己先联系了一下,分别用 list和set 进行存储和抽取,做了一个时间消耗的对比,感觉list应该比set读取的要快些,但是这也不一定,希望大家能够共同讨论。

废话少说上代码:

package com.test.testRandom;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
/** 根据概率获取奖品的测试类 */
public class TestRandom {
  public static void main(String[] args) {
    TestRandom tr = new TestRandom();
    // 用List随机
    long begin = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
      tr.getGumByList();
    }
    System.out.println("list使用时间:" + (System.currentTimeMillis() - begin));
    // 用set随机
    long begin1 = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
      tr.getGumBySet();
    }
    System.out.println("set使用时间:" + (System.currentTimeMillis() - begin1));
  }
  /* Set 获取 */
  void getGumBySet() {
    int random = new Random().nextInt(100);
    int prizeRate = 0;// 中奖率
    Iterator<Gem> it = initSetGems().iterator();
    while (it.hasNext()) {
      Gem gem = it.next();
      prizeRate += gem.getPriority();
      if (random < prizeRate) {
        System.out.println("奖品为:" + gem.getName() + " 概率:"
            + gem.getPriority() + " 随机数random:" + random
            + " 概率基数prizeRate:" + prizeRate);
        break;
      }
    }
  }
  /** List 获取 */
  void getGumByList() {
    int random = new Random().nextInt(100);
    int prizeRate = 0;// 中奖率
    Iterator<Gem> it = initGems().iterator();
    while (it.hasNext()) {
      Gem gem = it.next();
      prizeRate += gem.getPriority();
      if (random < prizeRate) {
        System.out.println("奖品为:" + gem.getName() + " 概率:"
            + gem.getPriority() + " 随机数random:" + random
            + " 概率基数prizeRate:" + prizeRate);
        break;
      }
    }
  }
  /** 初始化list */
  List<Gem> initGems() {
    List<Gem> gums = new ArrayList<Gem>();
    gums.add(new Gem("20", 20));
    gums.add(new Gem("7", 7));
    gums.add(new Gem("30", 30));
    gums.add(new Gem("24", 40));
    gums.add(new Gem("3", 3));
    return gums;
  }
  /** 初始化set */
  Set<Gem> initSetGems() {
    Set<Gem> gums = new HashSet<Gem>();
    gums.add(new Gem("20", 20));
    gums.add(new Gem("7", 7));
    gums.add(new Gem("30", 30));
    gums.add(new Gem("24", 40));
    gums.add(new Gem("3", 3));
    return gums;
  }
  /**奖品类*/
  class Gem {
    /** 奖品名称 */
    private String name;
    /** 奖品概率 */
    private int priority;
    public Gem() {
      super();
    }
    public Gem(String name, int priority) {
      super();
      this.name = name;
      this.priority = priority;
    }
    @Override
    public String toString() {
      return "Gum [name=" + name + ", priority=" + priority + "]";
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public int getPriority() {
      return priority;
    }
    public void setPriority(int priority) {
      this.priority = priority;
    }
  }
}

运行结果:

奖品为:20  概率:20 随机数random:17 概率基数prizeRate:20
奖品为:30  概率:30 随机数random:54 概率基数prizeRate:57
奖品为:3  概率:3 随机数random:99 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:87 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:75 概率基数prizeRate:97
奖品为:7  概率:7 随机数random:21 概率基数prizeRate:27
奖品为:20  概率:20 随机数random:9 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:77 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:10 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:83 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:40 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:78 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:58 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:44 概率基数prizeRate:57
奖品为:7  概率:7 随机数random:26 概率基数prizeRate:27
奖品为:30  概率:30 随机数random:56 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:50 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:34 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:27 概率基数prizeRate:57
奖品为:20  概率:20 随机数random:4 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:87 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:0 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:96 概率基数prizeRate:97
奖品为:7  概率:7 随机数random:20 概率基数prizeRate:27
奖品为:30  概率:30 随机数random:44 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:50 概率基数prizeRate:57
奖品为:7  概率:7 随机数random:23 概率基数prizeRate:27
奖品为:24  概率:40 随机数random:87 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:93 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:35 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:79 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:41 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:42 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:66 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:50 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:43 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:88 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:41 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:74 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:96 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:90 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:96 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:2 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:68 概率基数prizeRate:97
奖品为:7  概率:7 随机数random:25 概率基数prizeRate:27
奖品为:20  概率:20 随机数random:13 概率基数prizeRate:20
奖品为:30  概率:30 随机数random:52 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:32 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:54 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:71 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:90 概率基数prizeRate:97
奖品为:3  概率:3 随机数random:97 概率基数prizeRate:100
奖品为:30  概率:30 随机数random:52 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:65 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:87 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:35 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:37 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:55 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:77 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:78 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:53 概率基数prizeRate:57
奖品为:20  概率:20 随机数random:4 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:10 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:69 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:34 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:68 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:28 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:96 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:66 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:0 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:66 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:95 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:77 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:10 概率基数prizeRate:20
奖品为:7  概率:7 随机数random:24 概率基数prizeRate:27
奖品为:30  概率:30 随机数random:31 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:68 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:54 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:47 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:66 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:78 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:39 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:55 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:50 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:54 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:33 概率基数prizeRate:57
奖品为:30  概率:30 随机数random:55 概率基数prizeRate:57
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:72 概率基数prizeRate:97
奖品为:3  概率:3 随机数random:98 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:67 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:82 概率基数prizeRate:97
奖品为:7  概率:7 随机数random:22 概率基数prizeRate:27
奖品为:24  概率:40 随机数random:66 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:7 概率基数prizeRate:20
奖品为:30  概率:30 随机数random:43 概率基数prizeRate:57
list使用时间:20
奖品为:7  概率:7 随机数random:2 概率基数prizeRate:7
奖品为:24  概率:40 随机数random:49 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:58 概率基数prizeRate:67
奖品为:20  概率:20 随机数random:51 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:68 概率基数prizeRate:80
奖品为:24  概率:40 随机数random:30 概率基数prizeRate:50
奖品为:24  概率:40 随机数random:25 概率基数prizeRate:60
奖品为:20  概率:20 随机数random:41 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:63 概率基数prizeRate:100
奖品为:30  概率:30 随机数random:15 概率基数prizeRate:37
奖品为:30  概率:30 随机数random:28 概率基数prizeRate:30
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:84 概率基数prizeRate:97
奖品为:3  概率:3 随机数random:0 概率基数prizeRate:3
奖品为:24  概率:40 随机数random:62 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:17 概率基数prizeRate:33
奖品为:20  概率:20 随机数random:9 概率基数prizeRate:23
奖品为:24  概率:40 随机数random:17 概率基数prizeRate:47
奖品为:20  概率:20 随机数random:79 概率基数prizeRate:90
奖品为:30  概率:30 随机数random:47 概率基数prizeRate:50
奖品为:24  概率:40 随机数random:96 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:37 概率基数prizeRate:50
奖品为:30  概率:30 随机数random:74 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:57 概率基数prizeRate:77
奖品为:24  概率:40 随机数random:43 概率基数prizeRate:47
奖品为:30  概率:30 随机数random:36 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:42 概率基数prizeRate:50
奖品为:20  概率:20 随机数random:22 概率基数prizeRate:23
奖品为:24  概率:40 随机数random:84 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:24 概率基数prizeRate:43
奖品为:24  概率:40 随机数random:72 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:12 概率基数prizeRate:40
奖品为:24  概率:40 随机数random:17 概率基数prizeRate:40
奖品为:30  概率:30 随机数random:22 概率基数prizeRate:50
奖品为:20  概率:20 随机数random:12 概率基数prizeRate:20
奖品为:30  概率:30 随机数random:60 概率基数prizeRate:73
奖品为:24  概率:40 随机数random:28 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:41 概率基数prizeRate:73
奖品为:24  概率:40 随机数random:36 概率基数prizeRate:47
奖品为:24  概率:40 随机数random:80 概率基数prizeRate:100
奖品为:30  概率:30 随机数random:36 概率基数prizeRate:37
奖品为:7  概率:7 随机数random:46 概率基数prizeRate:47
奖品为:24  概率:40 随机数random:77 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:79 概率基数prizeRate:100
奖品为:7  概率:7 随机数random:34 概率基数prizeRate:37
奖品为:24  概率:40 随机数random:39 概率基数prizeRate:40
奖品为:30  概率:30 随机数random:99 概率基数prizeRate:100
奖品为:20  概率:20 随机数random:43 概率基数prizeRate:60
奖品为:7  概率:7 随机数random:62 概率基数prizeRate:67
奖品为:24  概率:40 随机数random:42 概率基数prizeRate:73
奖品为:7  概率:7 随机数random:3 概率基数prizeRate:7
奖品为:24  概率:40 随机数random:86 概率基数prizeRate:97
奖品为:24  概率:40 随机数random:11 概率基数prizeRate:43
奖品为:24  概率:40 随机数random:58 概率基数prizeRate:90
奖品为:24  概率:40 随机数random:57 概率基数prizeRate:77
奖品为:30  概率:30 随机数random:52 概率基数prizeRate:70
奖品为:7  概率:7 随机数random:60 概率基数prizeRate:67
奖品为:24  概率:40 随机数random:85 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:84 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:84 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:70 概率基数prizeRate:73
奖品为:24  概率:40 随机数random:83 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:85 概率基数prizeRate:93
奖品为:30  概率:30 随机数random:75 概率基数prizeRate:90
奖品为:20  概率:20 随机数random:54 概率基数prizeRate:70
奖品为:30  概率:30 随机数random:51 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:38 概率基数prizeRate:40
奖品为:30  概率:30 随机数random:52 概率基数prizeRate:57
奖品为:20  概率:20 随机数random:12 概率基数prizeRate:23
奖品为:20  概率:20 随机数random:14 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:55 概率基数prizeRate:90
奖品为:20  概率:20 随机数random:45 概率基数prizeRate:50
奖品为:7  概率:7 随机数random:99 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:32 概率基数prizeRate:40
奖品为:30  概率:30 随机数random:25 概率基数prizeRate:50
奖品为:30  概率:30 随机数random:96 概率基数prizeRate:100
奖品为:20  概率:20 随机数random:8 概率基数prizeRate:20
奖品为:20  概率:20 随机数random:17 概率基数prizeRate:30
奖品为:20  概率:20 随机数random:56 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:3 概率基数prizeRate:40
奖品为:7  概率:7 随机数random:20 概率基数prizeRate:27
奖品为:20  概率:20 随机数random:3 概率基数prizeRate:20
奖品为:24  概率:40 随机数random:71 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:44 概率基数prizeRate:80
奖品为:24  概率:40 随机数random:72 概率基数prizeRate:93
奖品为:24  概率:40 随机数random:73 概率基数prizeRate:97
奖品为:20  概率:20 随机数random:47 概率基数prizeRate:50
奖品为:20  概率:20 随机数random:58 概率基数prizeRate:60
奖品为:24  概率:40 随机数random:35 概率基数prizeRate:70
奖品为:20  概率:20 随机数random:12 概率基数prizeRate:20
奖品为:30  概率:30 随机数random:19 概率基数prizeRate:30
奖品为:3  概率:3 随机数random:7 概率基数prizeRate:10
奖品为:24  概率:40 随机数random:33 概率基数prizeRate:60
奖品为:20  概率:20 随机数random:83 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:27 概率基数prizeRate:30
奖品为:3  概率:3 随机数random:99 概率基数prizeRate:100
奖品为:24  概率:40 随机数random:85 概率基数prizeRate:100
奖品为:20  概率:20 随机数random:89 概率基数prizeRate:97
奖品为:30  概率:30 随机数random:15 概率基数prizeRate:30
奖品为:24  概率:40 随机数random:41 概率基数prizeRate:70
set使用时间:14

PS:这里再为大家提供几款功能类似的在线工具供大家参考:

在线随机数字/字符串生成工具:
http://tools.jb51.net/aideddesign/suijishu

在线随机字符/随机密码生成工具:
http://tools.jb51.net/aideddesign/rnd_password

高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java随机抽取指定范围内不重复的n个数

    一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j2me中没有: int randomNumber = (int) Math.round(Math.random()*(max-min)+min); 2.在System类中有一个currentTimeMillis()方法,这个方法返回从1970年1月1号0点0分0秒到目前的一个long型的毫秒数,可作

  • JAVA 生成随机数并根据后台概率灵活生成的实例代码

    最近碰到一个大转盘的业务,奖品可根据数据后台灵活设置中奖概率,看起来挺简单的业务功能,但实现起来对我这个毫无经验的人来说并不容易,后面又碰到一个根据后台概率随机获取不同概率的档位积分,前面是两个实际中业务要用到的话不多说吧,直接上我写概率工具类吧. 1:第一种方法 /** * 根据概率 获取随机积分 * * @param rdm * @return */ //这里的参数是一个存储概率集合当然你也可以用数组 public static Integer randomPoints(ArrayList<

  • Java 随机取字符串的工具类

    一.Java随机数的产生方式 在Java中,随机数的概念从广义上将,有三种. 1.通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字. 2.通过Math.random()返回一个0到1之间的double值. 3.通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大. 二.Random类API说明 1.Java API说明 Random类的实例用于生成伪随机数流.此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 D

  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    代码如下所示: 复制代码 代码如下: package com.hoo.util; import java.awt.Color;  import java.awt.Font;  import java.awt.Graphics;  import java.awt.image.BufferedImage;  import java.util.Random; import javax.imageio.ImageIO;  import javax.servlet.http.HttpServletRequ

  • Java生成含字母和数字的6位随机字符串

    本文实例为大家分享了Java生成6位随机字符串的实现代码,具体内容如下 package com.amos.tools; import java.util.ArrayList; import java.util.List; import java.util.Random; public class InvertCodeGenerator { public static void main(String[] args) { // TODO Auto-generated method stub Lis

  • 如何用java生成指定范围的随机数

    要生成在[min,max]之间的随机整数, package edu.sjtu.erplab.io; import java.util.Random; public class RandomTest { public static void main(String[] args) { int max=20; int min=10; Random random = new Random(); int s = random.nextInt(max)%(max-min+1) + min; System.

  • JAVA 根据设置的概率生成随机数的方法

    本文介绍了JAVA 根据设置的概率生成随机数的方法,分享给大家 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; public class RandomTest { // String 可以为任意类型 也可以自定义类型 static Map<String, Integer> keyChanceMap

  • java随机抽取指定范围不重复的数字

    本文给大家介绍如何在JAVA中实现随机无重复数字的功能.如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到.包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题的模式和基础知识如何. 希望这篇文章能给初次接触的朋友一些帮助,因为我曾接触过一些朋友要么写不出来,要么使用很平铺的思维方式去实现它. 一般有点开发经验的朋友都能实现这样的功能,只不过是效率上的问题.我们一般在面对这样的问题时,总会平铺直序的联想到,先生成一个数组,然后在一个循环中向数组中添加随机数

  • java实现随机生成UUID

    java实现随机生成UUID public class IDGenerator { private static long num=0; /** * 随机生成UUID * @return */ public static synchronized String getUUID(){ UUID uuid=UUID.randomUUID(); String str = uuid.toString(); String uuidStr=str.replace("-", ""

  • java生成随机字符串的两种方法

    本文实例为大家分享了java生成随机字符串的具体代码,供大家参考,具体内容如下 import java.util.Random; public class CharacterUtils { //方法1:length为产生的位数 public static String getRandomString(int length){ //定义一个字符串(A-Z,a-z,0-9)即62位: String str="zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZ

  • java生成字母数字组合的随机数示例 java生成随机数

    复制代码 代码如下: package com.test; import java.util.Random; public class GenerateRandomNumber { public static void main(String[] args) { System.out.println("生成的10为随机数为:" + getCharAndNumr(10)); } /**  * java生成随机数字和字母组合  * @param length[生成随机数的长度]  * @re

随机推荐