java中用到了概率这个东西,不懂,希望有人指点一下

J2EE 码拜 7年前 (2015-11-13) 754次浏览
最近要做一个手机app的插屏广告,本人这里要做的事情很简单,就是做一个后台,可以上传包和图片,这些都做完了,但是最难的一个问题就是–修改图片显示的概率,也就是插屏广告里边的图片是随机显示的,但是也有一个概率,例如本人a图片的收入多,那本人就在后台把a的显示几率调大一些。这样。需求就是这样,原因是以前没做过这种,而且图片数量是动态的,传到本人的servlet里边,本人也不清楚怎么通过计算,最后返回的是一张图片。本人在main()里边写了个网上看到的例子,但是本人不知道该怎么把它改成动态的…..
public static void main(String[] args) {
// TODO Auto-generated method stub
//属性1,2,3
String st1=”一”;
String st2=”二”;
String st3=”三”;
//概率1,2,3
double do1=0.5;
double do2=0.3;
double do3=0.2;
double randomNum = Math.random();
    if(randomNum >=do1+do2 && randomNum <= do1+do2+do3 ){
     System.out.println(st3);
    }else if(randomNum >= do1+do3 && randomNum <= do1+do2+do3){
     System.out.println(st2);
    }else if(randomNum >= do2+do3 && randomNum <=do1+do2+do3){
     System.out.println(st1);
    }else{
     System.out.println(0);
    }
}
这个只要改一下那个概率的顺序就完全不行了。求指点,或本人这个办法本来就不行。希望有人可以指点一下帮忙解决啊!
解决方案:10分
随机一个(1-100)的数除以100得到的数再通过sql查询(比(1-100)/100这个比例大的)升序列出返回第一个就是你要的
解决方案:10分
	private static void test() {
		// map 记录每个图片的概率
		Map<String, Float> map = new HashMap<String, Float>();
		// a,b,c的概率和也可以不为1,它对自动把概率值当比例值去运行。
		map.put("a", 0.3f);
		map.put("b", 0.2f);
		map.put("c", 0.1f);
		// 返回的s就是按照上面的概率参数的。
		String s = probability(map);
		System.out.println(s);
	}
	/**
	 * 按照概率集合参数随机对象
	 * @param map
	 * @return
	 */
	private static String probability(Map<String, Float> map) {
		Float total = 0f;
		Map<Float, String> tempMap = new LinkedHashMap<Float, String>(); // 使用有序的map集合以保证key值是递增的
		Iterator<Entry<String, Float>> it = map.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Float> entry = (Map.Entry<String, Float>) it.next();
			total += entry.getValue();
			tempMap.put(total, entry.getKey());
		}
		float index = new Random().nextFloat()*total;
		Iterator<Entry<Float, String>> tempIt = tempMap.entrySet().iterator();
		while (tempIt.hasNext()) {
			Entry<Float, String> next = tempIt.next();
			if (index < next.getKey()) {
				return next.getValue();
			}
		}
		return null;
	}
解决方案:7分
总体思路就是给整个事件分段,a/b/c..按照概率分成不同的段,然后产生一个随机数,该随机数所在的段即为选择到的值。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java中用到了概率这个东西,不懂,希望有人指点一下
喜欢 (0)
[1034331897@qq.com]
分享 (0)