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