Java帶權重的隨機數

lai123 8年前發布 | 2K 次閱讀 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!