Java Generating Better Random Numbers
Problem
You need to generate better random numbers.
Solution
Construct a java.util.Random object (not just any old random object) and call its
next*( ) methods. These methods include nextBoolean( ) , nextBytes( ) (which fills
the given array of bytes with random values), nextDouble( ) , nextFloat( ) , nextInt( ) ,
and nextLong( ) . Don’t be confused by the capitalization of Float , Double , etc. They
return the primitive types boolean , float , double , etc., not the capitalized wrapper
objects. Clear enough? Maybe an example will help:
// Random2.java // java.util.Random methods are non-static, so need to construct Random r = new Random( ); for (int i=0; i<10; i++) System.out.println("A double from java.util.Random is " + r.nextDouble( )); for (int i=0; i<10; i++) System.out.println("An integer from java.util.Random is " + r.nextInt( ));
You can also use the java.util.Random nextGaussian( ) method, as shown next. The nextDouble( ) methods try to give a “flat” distribution between 0 and 1.0, in which each value has an equal chance of being selected. A Gaussian or normal distribution is a bell-curve of values from negative infinity to positive infinity, with the majority of the values around zero (0.0).
// Random3.java Random r = new Random( ); for (int i=0; i<10; i++) System.out.println("A gaussian random double is " + r.nextGaussian( ));
See Also
The Javadoc documentation for java.util.Random , and the warning in the Introduc- tion about pseudo-randomness versus real randomness. For cryptographic use, see class java.security.SecureRandom , which provides crypto- graphically strong pseudo-random number generators (PRNG).
No comments:
Post a Comment