Java 随机数概率算法

如何让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取集合里面的数就可以了

根据比例创建数字集合,然后从里面进行随机