在 Java 中获取随机布尔值

2022-08-31 12:27:43

好的,我在我的代码中实现了这个SO问题:随机返回True或False

但是,我有奇怪的行为:我需要同时运行十个实例,其中每个实例每次运行只返回一次 true 或 false。令人惊讶的是,无论我做什么,每次我都得到false

有没有一些东西可以改进方法,所以我至少有大约50%的机会得到?true


为了使其更易于理解:我将应用程序构建为JAR文件,然后通过批处理命令运行

 java -jar my-program.jar
 pause

程序内容 - 使其尽可能简单:

public class myProgram{

    public static boolean getRandomBoolean() {
        return Math.random() < 0.5;
        // I tried another approaches here, still the same result
    }

    public static void main(String[] args) {
        System.out.println(getRandomBoolean());  
    }
}

如果我打开10个命令行并运行它,我每次都会得到结果......false


答案 1

我建议使用 Random.nextBoolean()

话虽如此,因为你也使用过作品。以下是我的计算机上的行为:Math.random() < 0.5

$ cat myProgram.java 
public class myProgram{

   public static boolean getRandomBoolean() {
       return Math.random() < 0.5;
       //I tried another approaches here, still the same result
   }

   public static void main(String[] args) {
       System.out.println(getRandomBoolean());  
   }
}

$ javac myProgram.java
$ java myProgram ; java myProgram; java myProgram; java myProgram
true
false
false
true

毋庸置疑,无法保证每次都能获得不同的值。然而,在你的情况下,我怀疑

A)你没有使用你认为你是的代码,(比如编辑错误的文件)

B)您在测试时没有编译不同的尝试,或者

C)你正在使用一些非标准的破碎实现。


答案 2

你有没有试过看Java文档

从此随机数生成器的序列中返回下一个伪随机、均匀分布的布尔值 ...和 以(大约)相等的概率生成。truefalse

例如:

import java.util.Random;

Random random = new Random();
random.nextBoolean();

推荐