我试图获得一个零或一的随机数,但我的代码总是返回一个:
它需要是可复制的,所以我应该能够设置种子并在将来需要时获得相同的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;
}
我不明白那里出了什么问题。
答案 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;
}
}