随机为0或1的java随机数
我试图得到一个随机数,它是零或一,但我的代码总是返回一: 它需要是可复制的,所以我应该能够设置种子并在将来需要时获得相同的0或1随机为0或1的java随机数,java,Java,我试图得到一个随机数,它是零或一,但我的代码总是返回一: 它需要是可复制的,所以我应该能够设置种子并在将来需要时获得相同的0或1 我不明白那里出了什么问题 创建一个Random实例并调用其nextDouble方法。它返回一个介于0.0和1.0之间的值 public static int randomBit(long seed){ Random r = new Random(seed); return r.nextDouble() >= 0.5? 1 : 0; } 另外,如
我不明白那里出了什么问题 创建一个
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);
}
}
for(int i=1;i对您的问题的进一步调查可能会揭示答案。您选择了五个独立的测试用例。下面是一个更大的搜索:
public static void main(String[] args) {
for (int i = 0; i < 10000; i++)
System.out.println("Seed " + i + ": " + RandomNumberGenerator(i, 0, 1));
}
publicstaticvoidmain(字符串[]args){
对于(int i=0;i<10000;i++)
System.out.println(“种子”+i+:“+RandomNumberGenerator(i,0,1));
}
从这里我们发现4095的种子输出1,然后0开始出现
我鼓励您将来进行类似的扩展测试。您正在java.util.Random上使用nextInt。0和1之间没有整数。
同时保持种子的随机性,否则每次跑步都会得到相同的结果。
假设您试图获取一个范围(最小值、最大值)内的随机数,那么代码工作正常
为什么你不能只使用Math.random()
?“0到1之间的随机数”在你期望的值中是0.1
,或者你只想要整数?java.util.random.nextBoolean()
@WyattLowery它在上限上是独占的。所以nextInt(2)
返回0或1代码没有问题,因此您选择的所有种子都可能给出相同的结果。您尝试过其他值吗?但它需要一致性-可重复性-因此我应该能够设置种子-您知道我的意思吗?您应该使用=
而不是e> 以获得相等的分布。Math.random
返回一个0.0的值。设置种子怎么样?@S.Matthew_English作为记录,这不是对原始问题的回答。它只是原始代码的一个更紧凑的版本。输出仍然是所有的。@parser它可以是您想要的任何数字。回头看尽管如此,您可能应该使用另一种方法。只需知道此函数将为任何给定的seen提供相同的随机位。因此,如果您需要不同的随机位,您必须不断提供不同的种子。是的,这是明智的-将来我会这样做。谢谢。
public static void main(String[] args) {
for (int i = 0; i < 10000; i++)
System.out.println("Seed " + i + ": " + RandomNumberGenerator(i, 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;
}
}