我已经创建了一个游戏代码,产生一个心脏作为一个额外的生命持续不断,然而,我只希望它有机会发生有时,我决定最好的方法将是产生一个随机数,如果数字超过一定的值,它将产生一个心脏。
random = new Random();
double randHeartNum = random.nextDouble();
while (isPlaying == true) {
if (randHeartNum < 0.050) {
for (int i = 0; i < 1; i++) {
Bird heart = new Bird(getResources());
hearts[i] = heart;
}
randHeartNum = new Random().nextDouble();
}
}
for循环在心脏中成功生成,但当它被我的随机数发生器包围时,它就不工作了。
在randHeartNum=new Random()。nextDouble();
语句中,每次循环迭代都会创建,使用和删除一个新的Random()实例。
根据JavaDocs,
public Random()
创建一个新的随机数生成器。 此构造函数将随机数生成器的种子设置为一个很可能与此构造函数的任何其他调用不同的值。
重复发送构造函数并调用NextDouble()
方法提供的值并不是均匀分布的。
random = new Random();
double randHeartNum = random.nextDouble();
while (isPlaying == true) {
if (randHeartNum < 0.050) {
for (int i = 0; i < 1; i++) {
Bird heart = new Bird(getResources());
hearts[i] = heart;
}
randHeartNum = random().nextDouble();
}
}
或
使用Math.Random()
可能更简单-
double randHeartNum;
while (isPlaying == true) {
randHeartNum = Math.random();
if (randHeartNum < 0.050) {
for (int i = 0; i < 1; i++) {
Bird heart = new Bird(getResources());
hearts[i] = heart;
}
}
}
Math.Random()
java.util.Random()