如何让1到10 按自己设置的概率随机输出??????????????
比如你设置1出现的概率是0.05 2出现的概率是0.1 3出现的概率是0.3 ...
那么生成一个 0~1的随机浮点数
如果这个数在0~0.05之间,就输出1
在0.05~0.15之间就是2
0.15~0.45之间,就是3
.。。
借用下上面的方法,10%的概率就是让数值区间的长度为0.10
1-10 ,你可以假设是 1-10个奖项
那么可以理解:你需要设置的概率 ,可以额外弄个随机数。
例如:我弄个1000以内的随机数, 设置 1的概率是10% , 那么满足1-100 就都是 奖项1 满足。 设置2、3的概率是20%。
那么随机数在101-300 和 301 - 500 的区间内的就满足 。
同理,你可以反推其他的了吧?
http://blog.csdn.net/a9529lty/article/details/7464630
Integer[] nums = new Integer[100];
for(int j = 0 ; j< 5;j++){
nums[j] = 1;
}
for(int j = 5 ; j< 15;j++){
nums[j] = 2;
}
for(int j = 15 ; j< 45;j++){
nums[j] = 3;
}
for(int j = 45 ; j< 100;j++){
nums[j] = 0;
}
System.out.println(nums.length);
Random random = new Random();
float r = random.nextFloat();
Double d = Math.floor(r*100);
int i = d.intValue();
System.out.println(nums[i]);
public class Test {
// 设置每个数字产生的概率,这个就根据你自己的业务情况设计,我觉得你这个业务需求有点类似于抽奖活动
/**
* 0出现的概率为50%,类似于抽奖一分钱也没有抽到概率为一半
*/
public static double rate0 = 0.50;
/**
* 1出现的概率为20%,类似于抽到1元的概率为20%
*/
public static double rate1 = 0.20;
/**
* 2出现的概率为%15,类似于抽到2元的概率为15%
*/
public static double rate2 = 0.15;
/**
* 3出现的概率为10%,类似于抽到2元的概率为10%
*/
public static double rate3 = 0.10;
/**
* 4出现的概率为3%,类似于抽到4元的概率为3%
*/
public static double rate4 = 0.03;
/**
* 5出现的概率为1%,类似于抽到5元的概率为1%
*/
public static double rate5 = 0.01;
public static void main(String[] args) {
int i = 0;
Test t = new Test();
for (i = 0; i <= 100; i++)
{
//通过100条数据测试,可以发现半数以上即50%上都是没有中奖的。
System.out.println(t.randomNumber());
}
}
/**
*
* @Description: 判断,例如0出现的概率为50%,则介于0到0.50之间的返回1
* @param @return
* @return int
* @throws
* @author ifnaer
* @date 2017-4-27
*/
private int randomNumber() {
Random r = new Random();
float randomNumber = r.nextFloat();
if (randomNumber >= 0 && randomNumber <= rate0) {
System.out.println("randomNumber:"+randomNumber);
return 0;
} else if (randomNumber >= rate0 && randomNumber <= rate0 + rate1) {
System.out.println("randomNumber:"+randomNumber);
return 1;
} else if (randomNumber >= rate0 + rate1
&& randomNumber <= rate0 + rate1 + rate2) {
System.out.println("randomNumber:"+randomNumber);
return 2;
} else if (randomNumber >= rate0 + rate1 + rate2
&& randomNumber <= rate0 + rate1 + rate2 + rate3) {
System.out.println("randomNumber:"+randomNumber);
return 3;
} else if (randomNumber >= rate0 + rate1 + rate2 + rate3
&& randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4) {
System.out.println("randomNumber:"+randomNumber);
return 4;
} else if (randomNumber >= rate0 + rate1 + rate2 + rate3 + rate4
&& randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4
+ rate5) {
System.out.println("randomNumber:"+randomNumber);
return 0;
}
return 0;
}
}
你把代码拷贝下拉运行一下,可以查看结果,希望能帮到你!
建立一个集合,有多少几率你就加多少个该元素到这个集合里面(小数点,就全部放大10,100倍)
配合random随机index取集合里面的数就可以了
根据比例创建数字集合,然后从里面进行随机