【问题标题】:How to get random numbers with different probabilities in different ranges in java? [duplicate]如何在java中获取不同范围内不同概率的随机数? [复制]
【发布时间】:2018-11-26 12:10:07
【问题描述】:

我想得到一个介于 0 到 100 之间的整数随机数,在不同的范围内具有不同的概率。

例如,我希望 0 到 20 之间的值的概率为 0.5,21 到 80 之间的值的概率为 0.4,81 到 100 之间的值的概率为 0.1

Java 中是否有任何方法或类或任何 Java 库可以做到这一点?如果没有,我自己怎么做?

【问题讨论】:

  • 写一些代码给我们看看。
  • 没有拉法乌·索卡尔斯基。该帖子正在寻找一种方法来为不同的值提供不同的概率。但我正在寻找一种方法来为不同的范围提供不同的概率。

标签: java random


【解决方案1】:

你只需要一个额外的随机数来确定它应该生成的范围:

int getRandomNumberWithRangeProbability() {
    double range = Math.random();

    if (range < 0.5) {
        return randomWithRange(0, 20);
    } else if (range < 0.9) {
        return randomWithRange(21, 80);
    } else {
        return randomWithRange(81, 100);
    }
}

int randomWithRange(int min, int max) {
    int range = (max - min) + 1;
    return (int) (Math.random() * range) + min;
}

一个小测试可以找到here

AusCBloke randomWithRange() 方法的功劳。

【讨论】:

    【解决方案2】:

    您应该在每个范围内随机获取,然后在 0 和 1 之间获取另一个随机数,并根据您的兴趣进行处理 祝你好运 ETG

    【讨论】:

      【解决方案3】:

      我可以想到这种方式不知道是否有任何内置函数可以这样做

      1. 因此,请创建一个返回两个整数之间随机数的函数。
      2. 使变量可能具有 1-10 的随机值
      3. 满足这些条件
      if(probable>=0 &&  probable<=5){
                random = getUniqueRandom(0, 20);
      
            }
            else if(probable>=6 &&  probable<=9) {
                random = getUniqueRandom(21, 80);
      
            }
            else if (probable == 10) {
                random = getUniqueRandom(81, 100);
      
            }
      

      这里是工作实现

      import java.util.Random;
      
      
      public class Solution  {
          private static Random r = new Random();
          public static void main(String[] args) {
              int pro1 = 0, pro2 =0, pro3 =0;
              for(int i=0; i<10000; i++) {
              int probable = getUniqueRandom(0, 10);
              int random = 0;
      
              if(probable>=0 &&  probable<=5){
                  random = getUniqueRandom(0, 20);
                  pro1++;
              }
              else if(probable>=6 &&  probable<=9) {
                  random = getUniqueRandom(21, 80);
                  pro2++;
              }
              else if (probable == 10) {
                  random = getUniqueRandom(81, 100);
                  pro3++;
              }
      
              //System.out.println(random);
          }
              System.out.println("Checked 10000 Times.\n0-20 Found: "+pro1);
              System.out.println("21-80 Found: "+pro2);
              System.out.println("81-100 Found: "+pro3);
          }
          static int getUniqueRandom(int min, int max){
              int num = r.nextInt(max-min+1) + min;
              return num;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 2013-04-27
        • 2019-08-11
        相关资源
        最近更新 更多