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 = new HashMap<String, Integer>();
  static {
    keyChanceMap.put("aaa", 500);
    keyChanceMap.put("bbb", 1500);
    keyChanceMap.put("ccc", 2000);
    keyChanceMap.put("ddd", 3000);
    keyChanceMap.put("eee", 3000);
  }

  public static void main(String[] args) {
    Map<String, Integer> count = new HashMap<String, Integer>();
    List<String> list = new ArrayList<>();
    String item = null;
    for (int i = 0; i < 10000; i++) {
      item = chanceSelect(keyChanceMap);
      list.add(item);

      if (count.containsKey(item)) {
        count.put(item, count.get(item) + 1);
      } else {
        count.put(item, 1);
      }

    }
    for (String id : count.keySet()) {
      System.out.println(id + "\t出现了 " + count.get(id) + " 次");
    }

    Random rand = new Random();
    int num = rand.nextInt(10000);
    System.out.print("最终选择的随机数为:"+list.get(num));
  }

  public static String chanceSelect(Map<String, Integer> keyChanceMap) {
    if (keyChanceMap == null || keyChanceMap.size() == 0)
      return null;

    Integer sum = 0;
    for (Integer value : keyChanceMap.values()) {
      sum += value;
    }
    // 从1开始
    Integer rand = new Random().nextInt(sum) + 1;

    for (Map.Entry<String, Integer> entry : keyChanceMap.entrySet()) {
      rand -= entry.getValue();
      // 选中
      if (rand <= 0) {
        String item = entry.getKey();
        return item;
      }
    }
    return null;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

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

  • 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编程实现从给定范围内随机N个不重复数生成随机数的方法小结

    本文实例讲述了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类中有一个current

  • Angular+Node生成随机数的方法

    本文实例讲述了Angular+Node生成随机数的方法.分享给大家供大家参考,具体如下: 以前写过一个PHP生成随机数,然后jquey ajax获取,再jQuery改变文本的随机数的程序 现在用Angular 和 Node来重写一下 Angular的好处是双向绑定,这样直接设置变量,不用再重新设置了 Node的好处我目前还不是很理解,可以通过count这个例子来说明一下Node和PHP的不同之处 当然了,最大的好处就是,前后端都可以用JavaScript来写了,这样的话Javascript的水平

  • PHP生成随机数的方法总结

    第一种方法用mt_rand() function GetRandStr($length){ $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $len=strlen($str)-1; $randstr=''; for($i=0;$i<$length;$i++){ $num=mt_rand(0,$len); $randstr .= $str[$num]; } return $randstr; } $numb

  • Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入random模块. import random 下面介绍下Python内置的random模块的几种生成随机数的方法. 1.random.random()随机生成 0 到 1 之间的浮点数[0.0, 1.0).注意的是返回的随机数可能会是 0 但

  • Qt生成随机数的方法

    目录 1.生成随机数 2.生成不重复的随机数 3.生成递增的随机数 1.生成随机数         生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值.比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间.而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数

  • Python生成随机数的方法详解(最全)

    目录 使用 random 模块 使用 NumPy 库 使用 secrets 模块 使用 random.org 网站 使用 random.choices()方法 python生成随机数都有哪些办法呢 使用 random 模块:random模块是python内置的模块,使用方法如random.randint()生成一个随机整数. 使用 NumPy 库:NumPy 是一个强大的数值计算库,它提供了生成随机数的功能,例如numpy.random.randint()生成一个随机整数. 使用 secrets

  • php简单生成随机数的方法

    本文实例讲述了php简单生成随机数的方法.分享给大家供大家参考.具体如下: <?php /** *生成随机数,可用户验证码 *@param */ function randStr($m = 5) { $new_str = ''; $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwsyz0123456789'; $max=strlen($str)-1; for ($i = 1; $i <= $m; ++$i) { $new_str

  • js生成随机数的方法实例

    js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任意随机数就好理解了.比如实际中我们可能会有如下的需要: (1)生成一个 0 - 100 之间的随机整数,那么则可以: parseInt(100*Math.random()); 注意:因为Math.random()的返回值是包括0和1的,所以这里是有生成0和100的可能性的. (2)生成一个从 m - n 之间的随机整数,例如要生

  • PHP生成随机数的方法实例分析

    通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. 复制代码 代码如下: function randomkeys($length) { $pattern = '1234567890abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLOMNOPQRSTUVWXYZ,./&l t;>?;#:@~[]{}-_=+)(*&^%$?!'; //

随机推荐