Java 從一組數據隨機選擇並可設置出現概率


 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Random;
 4 
 5 
 6 
 7 public class Test {
 8 
 9     //String 可以為任意類型 也可以自定義類型
10     static Map<String, Integer> keyChanceMap = new HashMap<String,Integer>();
11     static{
12         keyChanceMap.put("出現比例為10的", 10);
13         keyChanceMap.put("出現比例為100的", 100);
14         keyChanceMap.put("出現比例為500的", 500);
15         keyChanceMap.put("出現比例為1000的", 1000);
16         keyChanceMap.put("出現比例為10000的", 10000);
17     }
18     
19     public static void main(String[] args) {
20         Map<String, Integer> count = new HashMap<String,Integer>();
21         for (int i = 0; i < 100000; i++) {
22             
23             
24             String item = chanceSelect(keyChanceMap);
25             
26             if (count.containsKey(item)) {
27                 count.put(item, count.get(item) + 1);
28             } else {
29                 count.put(item, 1);
30             }
31         }
32         
33         for(String id : count.keySet()){
34             System.out.println(id+"\t出現了 "+count.get(id)+" 次");
35         }
36     }
37 
38     
39     public static String chanceSelect(Map<String, Integer> keyChanceMap) { 
40         if(keyChanceMap == null || keyChanceMap.size() == 0)  
41              return null;  
42           
43         Integer sum = 0;  
44         for (Integer value : keyChanceMap.values()) {  
45              sum += value;  
46         }  
47         // 從1開始  
48         Integer rand = new Random().nextInt(sum) + 1;  
49           
50         for (Map.Entry<String, Integer> entry : keyChanceMap.entrySet()) {
51             rand -= entry.getValue();
52             // 選中
53             if (rand <= 0) {
54                 String item = entry.getKey();
55                 return item;
56             }
57         } 
58           
59         return null;  
60    }
61 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM