z991876960
JAVA-ZHUANG
2017-04-27 07:22
采纳率: 14.3%
浏览 3.8k
已采纳

Java 随机数概率算法

如何让1到10 按自己设置的概率随机输出??????????????

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • caozhy
    已采纳

    比如你设置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
    .。。

    点赞 评论
  • huixinjinkongxin
    糖果给你 2017-04-27 07:32

    借用下上面的方法,10%的概率就是让数值区间的长度为0.10

    点赞 评论
  • shijing266
    执笔记忆的空白 2017-04-27 07:32

    1-10 ,你可以假设是 1-10个奖项

    那么可以理解:你需要设置的概率 ,可以额外弄个随机数。
    例如:我弄个1000以内的随机数, 设置 1的概率是10% , 那么满足1-100 就都是 奖项1 满足。 设置2、3的概率是20%。
    那么随机数在101-300 和 301 - 500 的区间内的就满足 。

    同理,你可以反推其他的了吧?

    点赞 评论
  • shen_wei
    shen_wei 2017-04-27 07:41
    点赞 评论
  • xiajinqian
    brandblue 2017-04-27 07:55

    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]);

    点赞 评论
  • u010808544
    阿蓝好多个8 2017-04-27 09:03

    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;
    }
    

    }
    你把代码拷贝下拉运行一下,可以查看结果,希望能帮到你!

    点赞 评论
  • qq503758762
    点点滴滴的淡淡的 2017-04-27 09:03
     建立一个集合,有多少几率你就加多少个该元素到这个集合里面(小数点,就全部放大10,100倍)
     配合random随机index取集合里面的数就可以了
    
    点赞 评论
  • qq_27905183
    19年,重新开始写 2017-04-28 02:17

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

    点赞 评论

相关推荐