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

java中用到了概率这个东西,不懂,希望有人指点一下
最近要做一个手机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);
    }
}

这个只要改一下那个概率的顺序就完全不行了。求指教,或者我这个办法本来就不行。希望有人可以指教一下帮忙解决啊!!

------解决方案--------------------
随机一个(1-100)的数除以100得到的数再通过sql查询(比(1-100)/100这个比例大的)升序列出返回第一个就是你要的
------解决方案--------------------

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

------解决方案--------------------
引用:
Quote: 引用:


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


有点看不懂啊......java中用到了概率这个东西,不懂,希望有人指点一下,该如何处理

总体思路就是给整个事件分段,a/b/c..按照概率分成不同的段,然后产生一个随机数,该随机数所在的段即为选择到的值。