如果是我,我马上想到的方法是这样.如果我有两张图片,A和B,分别的显示概率是60%和40%.那我就定义一个随机函数
public static int random() {
return (int) (Math.random() * 100);
}
根据这个函数的返回值在那一个范围,我就决定显示那张图.
比如返回的数在[0-59]那么就显示A,剩下的就显示B.当然代码的世界,你没办法找到一个真正的"随机",一切都是计算所得.
public static int random() {
return (int) (Math.random() * 100);
}
根据这个函数的返回值在那一个范围,我就决定显示那张图.
比如返回的数在[0-59]那么就显示A,剩下的就显示B.当然代码的世界,你没办法找到一个真正的"随机",一切都是计算所得.
解决方案 »
- 知道的进!!!!world文件 转换 图片 方法!!!!!!
- 包名显示问题
- 谁能推荐我本java j2ee方面比较权威比较全面的书?
- 我是菜鸟...最近导师叫我开发基于webservice的图书馆系统...
- 散分
- 关于spring+hibernate调用jspsmartupload组件上传文件
- 应用是用webwork2+hibernate作为框架,在运行时出现如下错误,各位达人帮帮忙!!!!给分
- 100分!!!在线急求:jdbc for sql server 7.0 driver。
- 串行化问题,原始类型都可串行化吗?一个实现了Serializable的类中有不能被串行化的对象的引用,那么此类还可以被串行化吗?
- 我想知道打包后,都打包了什么东西,
- tomcat7 websocket 连接数的问题
- 请问,axis2发布的webservice接口中无法注入Dao类,为什么啊?
然后随机0-99的数,从数组中取出来就是这个,模拟一个随机取东西的方法
java.util.Random r=new java.util.Random();
int[] x={1,1,2,1,1,1,4};
for(int i=0;i<10;i++){
System.out.println(x[r.nextInt(7)]);
}
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;
}
有点看不懂啊......
总体思路就是给整个事件分段,a/b/c..按照概率分成不同的段,然后产生一个随机数,该随机数所在的段即为选择到的值。
比如有A、B两张图片,A要出现6次,B要出现4次。
可以在配置文件里面配置A出现的条件是余数为0、2、4、5、6、8,则B出现的条件是余数为1、3、7、9.定义一个自动增长的int变量i,没显示一次i++一次,大概算了一下,只需要5-7行代码就可以决定出现哪个图片