欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-16 10:22:52
本文介绍了java 根据设置的概率生成随机数的方法,分享给大家 import java.util.arraylist; import java.util.h...

本文介绍了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;
  }
}

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