[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 map = new HashMap();
map.put("key","A");
map.put("value","30");
Map map1 = new HashMap();
map.put("key","B");
map.put("value","70");
List> list = new ArrayList>();
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> list,int ran){
//map里放的是a,b,c 值,和每个a、b、c对应的权重
int sum=0;
int total = list.size();
for(int i=0;i
sum+=Integer.parseInt(list.get(i).get("value").toString());
if(ran<=sum){
return list.get(i).get("key").toString();
}
}
return null;
}
}