首页 新闻 搜索 专区 学院

Java关于随机数的问题?

0
悬赏园豆:20 [待解决问题]

路人甲攻击路人乙,假设结果只可能是“击中”,"击中要害","躲闪","招架"这四种之一,
并且只能是一种(为描述方便这四种结果分别用符号A、B、C、D代表);
假设这四种结果产生的概率分别是a%、b%、c%、d%,其中a+b+c+d=100,要求从这四种结果中随机选一种结果,
发生概率越高的事件被选中的几率越大。
/**
*根据概率随机选择一种结果,发生概率越高的事件被选中的几率越大
*@param per 参数数组的元素值分别顺序代表A,B,C,D发生的概率
*@return 返回0代表A事件,返回1代表B事件,返回2代表C事件,返回3代表D事件
*/
public int randomResult(int[] per){

}

坠叶飘香的主页 坠叶飘香 | 初学一级 | 园豆:153
提问于:2013-08-20 20:23
< >
分享
所有回答(2)
0

方法很多吧!

1、从1~100,按照概率,存入ArrayList a,b,c,d;然后随机生成1~100之间的一个数,如果在a,则A;若b,则B;...

2、随机生成1~100之间的一个数,如果小于a,则A;大于a小于a+b则B;...

幻天芒 | 园豆:36672 (高人七级) | 2013-08-20 20:37

四个概率的和为100,并且概率越高被选中的几率越大呀?

支持(0) 反对(0) 坠叶飘香 | 园豆:153 (初学一级) | 2013-08-20 20:46

@坠叶飘香: 概率大,判断区间就大呗。命中率也就越高了~

支持(0) 反对(0) 幻天芒 | 园豆:36672 (高人七级) | 2013-08-20 23:39
0
public class Random11 {
    
    public Random11(){
        int[] pre = {49,1,1,49};
        int[] tong = new int[4];
        String[] str={"A","B","C","D"};
        for (int i=0; i<100; i++){
            int result = randomResult(pre);
            tong[result]++;
        }
        for (int i=0;i<str.length;i++){
            System.out.println(str[i]+"的概率为:"+tong[i]+"%");
        }
    }
    public  int randomResult(int[] pre){
        while (true){
            for (int i=0; i<pre.length; i++){
                //除以2 减少循环次数,提高准确度。+1是因为概率为1时,pre[i]/2 ==0
                for (int j=0; j<pre[i]/2+1;j++){
                    int tmp  = (int)(Math.random()*100);
                    if (tmp == i) {
                        return i;
                    }
                }
            }
            //逆序 循环 提高准确度
            for (int i=pre.length-1; i>=0; i--){
                for (int j=0; j<pre[i]/2+1;j++){
                    int tmp  = (int)(Math.random()*100);
                    if (tmp == i) {
                        return i;
                    }
                }
            }
        }
    }
    public static void main(String[] args){
        new Random11();
    }
}

有些偏差

薛遗山 | 园豆:106 (初学一级) | 2013-08-27 10:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册