以给定概率在间隔中生成随机数

时间:2015-09-29 13:30:44

标签: java

我想生成具有给定概率的随机数,但我不确定如何:

我有一个二维数组:int [] [] aryNumbers = new int [4] []

并且对于每个数字(4),我想在[1 ... 9]的整数中生成一个int结果,其概率为0.5。否则在[10 ... 99]的区间内生成一个数字。

注意:我知道如何生成一个数字,但在两个时间间隔之间选择会让我感到困惑。

修改:

 public int numberAttribution(){
    Random rand = new Random();
    double dbNum = rand.nextDouble();
    int intNum;
    int min1 = 1, max1 = 9, range1 = max1 - min1 + 1;
    int min2 = 10, max2 = 99, range2 =  max2 - min2 + 1;

    if(dbNum < 0.5){
        intNum = rand.nextInt(range1) + min1;
    }else{
        intNum = rand.nextInt(range2) + min2;
    } 
       System.out.print(intNum);
    return intNum;
}

2 个答案:

答案 0 :(得分:1)

所以如果我找对你,你想要50%的几率产生1到9之间的数字,否则产生10到99之间的数字?

在这种情况下你可以这样做:

int randomNumber = 0;
if (Math.random() > 0.5) {
    randomNumber = 1 + (int) (Math.random() * 9);
} else {
    randomNumber = 10 + (int) (Math.random() * 90);
}

Runnable version

答案 1 :(得分:1)

我认为这种方法每秒会被调用数百万次。在这种情况下,每次只生成一个随机数可能是明智的:

  private static int generateRandom() {
    double rand = Math.random();
    if (rand < 0.5) {
      rand *= 18;
      rand += 1;
    } else {
      rand -= 0.5;
      rand *= 180;
      rand += 10;
    }
    return (int) rand;
  }