路人甲攻击路人乙,假设结果只可能是“击中”,"击中要害","躲闪","招架"这四种之一,
并且只能是一种(为描述方便这四种结果分别用符号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){
}
方法很多吧!
1、从1~100,按照概率,存入ArrayList a,b,c,d;然后随机生成1~100之间的一个数,如果在a,则A;若b,则B;...
2、随机生成1~100之间的一个数,如果小于a,则A;大于a小于a+b则B;...
四个概率的和为100,并且概率越高被选中的几率越大呀?
@坠叶飘香: 概率大,判断区间就大呗。命中率也就越高了~
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(); } }
有些偏差