繁体   English   中英

java随机数,随机为0或1

[英]java random number that is randomly 0 or 1

我试图获取一个零或一的随机数,但是我的代码总是返回一个:

它必须是可复制的,所以将来我需要时,我应该能够设置种子并获得相同的0或1。

    // value after setting seed
    System.out.println("Object after seed 0: " + RandomNumberGenerator(20, 0, 1) );
    System.out.println("Object after seed 1: " + RandomNumberGenerator(10, 0, 1) );
    System.out.println("Object after seed 2: " + RandomNumberGenerator(22, 0, 1) );
    System.out.println("Object after seed 3: " + RandomNumberGenerator(93, 0, 1) );
    System.out.println("Object after seed 4: " + RandomNumberGenerator(04, 0, 1) );

}


public static int RandomNumberGenerator(int seed, int min, int max) 
{
       // create random object
       Random randomno = new Random();

       // setting seed
       randomno.setSeed( seed );

       return randomno.nextInt((max - min) + 1) + min;
}

我不明白那里出了什么问题。

创建一个Random实例,并调用其nextDouble方法。 它返回0.0到1.0之间的值。

public static int randomBit(long seed){
    Random r = new Random(seed);
    return r.nextDouble() >= 0.5? 1 : 0;
}

另外,如果您不熟悉问号符号,则将其称为三元运算符。 它本质上是一个压缩的if-else语句。

这是因为您使用了seed

如果您使用以下方法测试代码:

for (int i=1; i<10000; i++){
    if (RandomNumberGenerator(i, 0, 1)==0){
        System.out.println(i);
    }
}

你会看到, 0是在范围仅返回种子4096 - 8703

可能通过对您的问题的进一步调查来揭示答案。 您已经选择了五个隔离的测试用例。 这是一个更大的搜索:

public static void main(String[] args) {
    for (int i = 0; i < 10000; i++)
        System.out.println("Seed " + i + ": " + RandomNumberGenerator(i, 0, 1));
}

从中我们发现,直到4095输出1的种子,然后开始出现0。

我鼓励您将来进行类似的扩展测试。

您正在java.util.Random上使用nextInt。 0到1之间没有整数。也请保持种子随机,否则每次运行都会得到相同的结果。

假设您尝试获取某个范围(最小,最大)内的随机数,您的代码可以正常工作。

public class Main {
    public static void main(String[] args) {
        System.out.println("Started");
        System.out.println("Object after seed 0: " + RandomNumberGenerator(20, 0, 10) );
        System.out.println("Object after seed 1: " + RandomNumberGenerator(10, 0, 10) );
        System.out.println("Object after seed 2: " + RandomNumberGenerator(22, 0, 10) );
        System.out.println("Object after seed 3: " + RandomNumberGenerator(93, 0, 10) );
        System.out.println("Object after seed 4: " + RandomNumberGenerator(04, 0, 10) );
    }

    public static int RandomNumberGenerator(int seed, int min, int max) {
        // create random object
        Random randomno = new Random();

        // setting seed
        /*randomno.setSeed(seed);*/

        return randomno.nextInt((max - min) + 1) + min;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM