Java 随机返回真或假

Java 随机返回真或假,java,random,boolean,Java,Random,Boolean,我需要创建一个Java方法来随机返回true或false。如何执行此操作?(Math.random()

我需要创建一个Java方法来随机返回
true
false
。如何执行此操作?

(Math.random()<0.5)
随机返回true或false

java.util.random
已经具有以下功能:

public boolean getRandomBoolean() {
    Random random = new Random();
    return random.nextBoolean();
}
但是,每次需要一个随机布尔值时,总是创建一个新的
Random
实例是不高效的。相反,在类中创建一个需要随机布尔值的
Random
类型的属性,然后对每个新的随机布尔值使用该实例:

public class YourClass {

    /* Oher stuff here */

    private Random random;

    public YourClass() {
        // ...
        random = new Random();
    }

    public boolean getRandomBoolean() {
        return random.nextBoolean();
    }

    /* More stuff here */

}
这应该做到:

public boolean randomBoolean(){
    return Math.random() < 0.5;
}
公共布尔随机布尔(){
返回Math.random()<0.5;
}

您可以按照以下代码执行操作:

public class RandomBoolean {
    Random random = new Random();
    public boolean getBoolean() {
        return random.nextBoolean();
    }
    public static void main(String[] args) {
        RandomBoolean randomBoolean = new RandomBoolean();
        for (int i = 0; i < 10; i++) {
            System.out.println(randomBoolean.getBoolean());
        }
    }
}
公共类{
随机=新随机();
公共布尔getBoolean(){
返回random.nextBoolean();
}
公共静态void main(字符串[]args){
RandomBoolean RandomBoolean=新的RandomBoolean();
对于(int i=0;i<10;i++){
System.out.println(randomBoolean.getBoolean());
}
}
}

希望这对您有所帮助,谢谢。

您将通过以下方式获得:

return Math.random() < 0.5;
返回Math.random()<0.5;

您可以使用以下方法获得无偏结果:

Random random = new Random();
//For 50% chance of true
boolean chance50oftrue = (random.nextInt(2) == 0) ? true : false;
注意:random.nextInt(2)表示数字2是界。计数从0开始。所以我们有两个可能的数字(0和1),因此概率是50%

如果你想给你的结果更多的概率为真(或假),你可以调整以上如下

Random random = new Random();

//For 50% chance of true
boolean chance50oftrue = (random.nextInt(2) == 0) ? true : false;

//For 25% chance of true
boolean chance25oftrue = (random.nextInt(4) == 0) ? true : false;

//For 40% chance of true
boolean chance40oftrue = (random.nextInt(5) < 2) ? true : false;
Random Random=new Random();
//有50%的几率是真的
布尔值chance50oftrue=(random.nextInt(2)=0)?真:假;
//有25%的几率是真的
布尔值chance25oftrue=(random.nextInt(4)=0)?真:假;
//有40%的几率是真的
布尔值chance40oftrue=(random.nextInt(5)<2)?真:假;

Java的
Random
类利用了CPU的内部时钟(据我所知)。类似地,可以使用RAM信息作为随机性的来源。只需打开Windows任务管理器的“性能”选项卡,并查看物理内存-可用:它不断变化;大多数情况下,该值大约每秒更新一次,只有在极少数情况下,该值保持不变几秒钟其他更经常更改的值是系统句柄和线程,但我没有找到
cmd
命令来获取它们的值。因此,在本例中,我将使用可用物理内存作为随机性的来源

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public String getAvailablePhysicalMemoryAsString() throws IOException
    {
        Process p = Runtime.getRuntime().exec("cmd /C systeminfo | find \"Available Physical Memory\"");
        BufferedReader in = 
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        return in.readLine();
    }

    public int getAvailablePhysicalMemoryValue() throws IOException
    {
        String text = getAvailablePhysicalMemoryAsString();
        int begin = text.indexOf(":")+1;
        int end = text.lastIndexOf("MB");
        String value = text.substring(begin, end).trim();

        int intValue = Integer.parseInt(value);
        System.out.println("available physical memory in MB = "+intValue);
        return intValue;
    }

    public boolean getRandomBoolean() throws IOException
    {
        int randomInt = getAvailablePhysicalMemoryValue();
        return (randomInt%2==1);
    }


    public static void main(String args[]) throws IOException
    {       
        Main m = new Main();
        while(true)
        {
            System.out.println(m.getRandomBoolean());
        }
    }
}
如您所见,核心部分使用
Runtime.getRuntime().exec()
运行cmd
systeminfo
命令

为了简洁起见,我省略了try-catch语句。我运行了这个程序好几次,没有发生任何错误-cmd命令的输出中总是有一行“可用物理内存”

可能的缺点:

  • 执行此程序时有一些延迟。请注意,在
    main()
    函数中,在
    while(true)
    循环中,没有
    Thread.sleep()
    ,而且输出大约每秒只打印到控制台一次
  • 对于新打开的操作系统会话,可用内存可能是常量-请验证。我只有几个程序在运行,而且值几乎每秒都在变化。我想,如果您在服务器环境中运行此程序,那么为每个调用获取不同的值应该不是问题

  • 尽可能只添加添加信息的答案。这个答案与MichaelBorgwardt的答案几乎相同这有点多余
    randomBoolean
    可以是
    new Random()
    ,而不是
    getBoolean()
    具有
    nextBoolean()
    。上面的代码只是添加了一个毫无意义的类包装。我不知道,但我会读一些更好的东西,比如:
    //对于40%的概率为真布尔变化40oftrue=(random.nextInt(100)<40)