Java 概率百分比随机布尔发生器
我正在尝试编写一些代码,我想使用随机类,Java已经将一些设置为true或false,但是结果会受到一定几率的影响 例如,我想创建一个方法,在有人生病或没有生病时随机生成。如果服用维生素,患病几率为20%。如果不服用维生素,就有25%的疾病 我做了一些研究,发现API中的Random类确实有一个Random boolean方法,但我应该使用它吗?如果是这样,我将如何实现我的机会百分比 我知道我需要一个测试类来创建person对象,我知道如何做到这一点,但这里是我所拥有的。不知道从这里到哪里去Java 概率百分比随机布尔发生器,java,Java,我正在尝试编写一些代码,我想使用随机类,Java已经将一些设置为true或false,但是结果会受到一定几率的影响 例如,我想创建一个方法,在有人生病或没有生病时随机生成。如果服用维生素,患病几率为20%。如果不服用维生素,就有25%的疾病 我做了一些研究,发现API中的Random类确实有一个Random boolean方法,但我应该使用它吗?如果是这样,我将如何实现我的机会百分比 我知道我需要一个测试类来创建person对象,我知道如何做到这一点,但这里是我所拥有的。不知道从这里到哪里去 i
import java.util.Random;
public class SicknessTest {
private boolean sickness;
private boolean vitamin;
public void takeVitamin()
{
vitamin = true;
}
public void getSick()
{
}
}
如果您知道目标百分比,例如35%的概率为真,则生成一个介于0和99之间的随机整数。如果小于35,则为真。否则为false。生成一个double并检查它是否大于要比较的值
nextDouble()
返回一个介于0和1.0之间的值
Random rnd = new Random();
public void getSick()
{
if (vitamin)
sickness = rnd.nextDouble() <= 0.2;
else
sickness = rnd.nextDouble() <= 0.25;
}
Random rnd=new Random();
公众假期生病
{
if(维生素)
sick=rnd.nextDouble()好的,我会测试一下,谢谢。我认为这比使用nextDouble()更不可取。例如,如何以100亿分之一的概率这样做?Int溢出。另一方面,只要您对整数百分比满意,这就避免了浮点数学固有的不精确性。您可能希望调用rnd.nextInt(100)
因为它的上限不是结果范围的一部分。这就是我想要的简单性。问题似乎是CS101式的家庭作业,我不想拖入一大堆外部性。效果很好,但为什么不下一步呢?在极端情况下更精确一些。@SeanOwen同意。我试图运行一些快速基准测试,但还没有得到使用float而不是double的严重性的明确估计,但这肯定是提高测试准确性的一个简单方法。这里的代码也可以简化为sick=rnd.nextDouble()