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...
The easiest way to initialize a random number generator is to use the parameterless constructor, for example
However, in using this constructor you should recognize that algorithmic random number generators are not truly random, they are really algorithms that generate a fixed but random-looking sequence of numbers.
You can make it appear more 'random' by giving the Random constructor the 'seed' parameter, which you can dynamically built by for example using system time in milliseconds (which will always be different)
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: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.
you could get your clock() value and check if it is odd or even. I dont know if it is %50 of true
And you can custom-create your random function:
numbers 55555.. and 444.. are the big numbers to get a wide range function please ignore that skype icon :D
Have you tried to look at sun's (oracle) documentation?
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextBoolean()
anyway here's example code:
You can also make two random integers and verify if they are the same, this gives you more control over the probabilities.
Declare a range to manage random probability. In this example, there is a 50% chance of being true.
Generate 2 random integers.
Then simply compare return the value.
I also have a class you can use. RandomRange.java