随机返回正确或错误

时间:2012-01-16 09:35:30

标签: java random boolean

我需要创建一个 Java 方法来随机返回truefalse。我怎么能这样做?

7 个答案:

答案 0 :(得分:104)

班级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 */

}

答案 1 :(得分:55)

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

答案 2 :(得分:14)

这应该做:

public boolean randomBoolean(){
    return Math.random() < 0.5;
}

答案 3 :(得分: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());
        }
    }
}

希望这会对你有所帮助,谢谢。

答案 4 :(得分:2)

你会得到它:

return Math.random() < 0.5;

答案 5 :(得分:0)

您可以将以下内容用于无偏见的结果:

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

注意:random.nextInt(2)表示数字2是界。计数从0开始。所以我们有2个可能的数字(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;

答案 6 :(得分:0)

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());
        }
    }
}

如您所见,核心部分是使用systeminfo运行cmd Runtime.getRuntime().exec()命令。

为了简洁起见,我省略了try-catch语句。我多次运行了该程序,没有发生错误-cmd命令的输出中始终存在“可用物理内存”行。

可能的缺点:

  1. 执行该程序有些延迟。请注意,在main()循环内的while(true)函数中,没有Thread.sleep(),并且输出仅每秒大约打印一次到控制台。
  2. 对于新打开的OS会话,可用内存可能是恒定的-请验证。我只有几个程序在运行,并且值每秒都在变化。我想,如果您在服务器环境中运行该程序,则每次调用获得不同的值应该不是问题。