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; 
	 } 
    
} 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10407.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论