JAVA 根據設置的概率生成隨機數的方法
更新時間:2017年08月02日 17:10:58 作者:布諾
本篇文章主要介紹了JAVA 根據設置的概率生成隨機數的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本文介紹了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出現(xiàn)了 " + 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; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
log4j2 RollingRandomAccessFile配置過程
這篇文章主要介紹了log4j2 RollingRandomAccessFile配置過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解
這篇文章主要介紹了Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解,代理模式是23種設計模式的一種,他是指一個對象A通過持有另一個對象B,可以具有B同樣的行為的模式,為了對外開放協(xié)議,B往往實現(xiàn)了一個接口,A也會去實現(xiàn)接口,需要的朋友可以參考下2023-11-11Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法
這篇文章主要介紹了Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法,涉及Java針對session的操作及數據庫操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Spring?Boot多數據源事務@DSTransactional的使用詳解
本文主要介紹了Spring?Boot多數據源事務@DSTransactional的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06java多線程并發(fā)中使用Lockers類將多線程共享資源鎖定
Lockers在多線程編程里面一個重要的概念是鎖定,如果一個資源是多個線程共享的,為了保證數據的完整性,在進行事務性操作時需要將共享資源鎖定,這樣可以保證在做事務性操作時只有一個線程能對資源進行操作,下面看一個示例2014-01-01