JAVA 根據(jù)設(shè)置的概率生成隨機數(shù)的方法
更新時間:2017年08月02日 17:10:58 作者:布諾
本篇文章主要介紹了JAVA 根據(jù)設(shè)置的概率生成隨機數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本文介紹了JAVA 根據(jù)設(shè)置的概率生成隨機數(shù)的方法,分享給大家
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出現(xiàn)了 " + count.get(id) + " 次");
}
Random rand = new Random();
int num = rand.nextInt(10000);
System.out.print("最終選擇的隨機數(shù)為:"+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;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
log4j2 RollingRandomAccessFile配置過程
這篇文章主要介紹了log4j2 RollingRandomAccessFile配置過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解
這篇文章主要介紹了Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解,代理模式是23種設(shè)計模式的一種,他是指一個對象A通過持有另一個對象B,可以具有B同樣的行為的模式,為了對外開放協(xié)議,B往往實現(xiàn)了一個接口,A也會去實現(xiàn)接口,需要的朋友可以參考下2023-11-11
劍指Offer之Java算法習(xí)題精講鏈表專項訓(xùn)練
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03
Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法
這篇文章主要介紹了Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法,涉及Java針對session的操作及數(shù)據(jù)庫操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
Spring?Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解
本文主要介紹了Spring?Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
java多線程并發(fā)中使用Lockers類將多線程共享資源鎖定
Lockers在多線程編程里面一個重要的概念是鎖定,如果一個資源是多個線程共享的,為了保證數(shù)據(jù)的完整性,在進行事務(wù)性操作時需要將共享資源鎖定,這樣可以保證在做事務(wù)性操作時只有一個線程能對資源進行操作,下面看一個示例2014-01-01

