Pavel Janicek Pavel Janicek - 3 months ago 17
Java Question

Get random boolean in java

Okay, I implemented this SO question to my code: Return True or False Randomly

But, I have strange behavior: I need to run ten instances simultaneously, where every instance returns true or false just once per run. And surprisingly, no matter what I do, every time i get just

false


Is there something to improve the method so I can have at least roughly 50% chance to get
true
?




To make it more understandable: I have my application builded to JAR file which is then run via batch command

java -jar my-program.jar
pause


Content of the program - to make it as simple as possible:

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

}


If I open 10 command lines and run it, I get
false
as result every time...

Answer

I recommend using Random.nextBoolean()

That being said, Math.random() < 0.5 as you have used works too. Here's the behavior on my machine:

$ 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

Needless to say, there are no guarantees for getting different values each time. In your case however, I suspect that

A) you're not working with the code you think you are, (like editing the wrong file)

B) you havn't compiled your different attempts when testing, or

C) you're working with some non-standard broken implementation.