java随机数,随机为0或1

时间:2015-11-08 23:33:35

标签: java

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

它需要是可复制的,所以我应该能够设置种子并在将来需要时获得相同的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;
}

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

4 个答案:

答案 0 :(得分:2)

创建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语句。

答案 1 :(得分:2)

这是因为您使用了seed

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

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

您会看到0仅针对范围4096 - 8703中的种子返回。

答案 2 :(得分:2)

通过对您的问题的进一步调查,可以得出答案。您选择了五个独立的测试用例。这是一个更大的搜索:

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开始出现。

我鼓励你将来做这样广泛的测试。

答案 3 :(得分:1)

您在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;
    }
}
相关问题