我想生成一个具有给定概率的随机数,但我不确定如何:
我有一个二维数组:int[ ][ ] aryNumbers=new int[4][]
对于每个数字(4),我想生成一个整数为[1…9]的int结果,prob为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;
}
所以如果我没猜错的话,你希望有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);
}
可运行版本
我假设这个方法每秒将被调用数百万次。在这种情况下,每次只生成一个随机可能是明智的:
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;
}