Java帶權重的隨機數
[Java]代碼
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
//帶權重的隨機數
//面試的時候面試官問道一個這樣的問題
//A、B、C三個字符分別出現的概率是30%,40%,30%
//分析:首先1-100隨機產生一個數,判斷這個數,1-30出現的概率是30%, 31—70出現的概率是40%, 71-100出現的概率是30%
public class WeightRandom {
public static void main(String[] args) {
Random ran = new Random();
String str=getWanfei(ran.nextInt(100));
Map<String,Object> map = new HashMap<String,Object>();
map.put("key","A");
map.put("value","30");
Map<String,Object> map1 = new HashMap<String,Object>();
map.put("key","B");
map.put("value","70");
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
list.add(map);
list.add(map1);
System.out.println( getWeight(list,ran.nextInt(100)));
}
//知道權重的情況下
public static String getWanfei(int num){
if(num>=1 && num<=30){
return "A";
}else if(num>=31 && num<70){
return "B";
}else{
return "C";
}
}
//如果A、B、C的個數不確定 ,權重的總數也也不確定
public static String getWeight(List<Map<String,Object>> list,int ran){
//map里放的是a,b,c 值,和每個a、b、c對應的權重
int sum=0;
int total = list.size();
for(int i=0;i<total;i++){
sum+=Integer.parseInt(list.get(i).get("value").toString());
if(ran<=sum){
return list.get(i).get("key").toString();
}
}
return null;
}
}
本文由用戶 lai123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!