Java 当事情发生时随机化

Java 当事情发生时随机化,java,math,if-statement,random,double,Java,Math,If Statement,Random,Double,我已经在我的游戏中实现了加电,我希望它在杀死僵尸时有10%的几率应用到玩家身上。每次玩家子弹击中僵尸时,我都会尝试使用这段代码,但它并没有真正起作用 double rand = Math.random() * 10 + 1; if(rand == 1){ power.setShrink(true); } 我知道通电是有效的,因为如果我把它设置在if语句之外,播放器就会缩小 我如何使其在僵尸被杀死时有10%的几率应用于玩家?您可以使用一个简单的选择: if(Math.random() &

我已经在我的游戏中实现了加电,我希望它在杀死僵尸时有10%的几率应用到玩家身上。每次玩家子弹击中僵尸时,我都会尝试使用这段代码,但它并没有真正起作用

double rand = Math.random() * 10 + 1;
if(rand == 1){
    power.setShrink(true);
}
我知道通电是有效的,因为如果我把它设置在if语句之外,播放器就会缩小

我如何使其在僵尸被杀死时有10%的几率应用于玩家?

您可以使用一个简单的选择:

if(Math.random() > 0.9){
   power.setShrink(true);
}

这会给您一个随机的机会,即10中的1将触发通电。

您可以在类似的逻辑中使用
random.nextInt(10)


您当前的代码失败了,因为您的
double
很少会精确到
1

double是浮点数。在您的情况下,它可以是1到11之间的任何数字,最多可达53位精度的二进制数字。因此,它不仅可以是1,也可以是1.01,1.02,等等。因此,它正好是1的几率可以忽略不计

生成随机整数时,最好使用
Random.nextInt

Random r = new Random(); //only do this once

if(r.nextInt(10) == 0){
    power.setShrink(true);
}

兰德达到1的可能性很低。检查它是否在某个时间间隔内,这样更好。@Juvanis我也试过
double rand=Math.random()*1+1也不起作用。代码的真正问题是比较double和int。Java会将int转换为double,而不是double。因此,1.0001原则上不等于1.0000Correct,但您的示例表明nextInt是一种静态方法。