Several ways in which Java generates random numbers
One. In J2SE we can use the Math.random () method to produce a random number, the resulting random number is a double between 0-1, we can multiply him by a certain number, for example, multiplied by 100, he is a random within 100, this is not in the J2ME.
Two. In Java.util this package is provided with a random class, we can create a random object to generate a stochastic number, he can produce random integers, random float, random double, random long, This is also a method that we often use to take random numbers in the J2ME program.
Three. In our system class there is a Currenttimemillis () method, which returns a number of milliseconds from January 1, 1970 0:0 0 seconds to the current one, the return type is long, we can take him as a random number, we can take him to some number modulo, We can limit him to a range.
In fact, in the default constructor method of random, the third method is used to generate random numbers.
The following instructions are available for the random class in method two:
The Java.util.Random class is built in two ways: with seeds and without seeds
Without seeds:
This way will return random numbers, each running a different result
public class Randomtest {
public static void Main (string[] args) {
Java.util.Random r=new java.util.Random ();
for (int i=0;i<10;i++) {
System.out.println (R.nextint ());
}
}
With seeds:
This way, no matter how many times the program runs, the result is the same
public static void Main (string[] args) {
Java.util.Random r=new Java.util.Random (10);
for (int i=0;i<10;i++) {
System.out.println (R.nextint ());
}
}
The difference between the two approaches is that
(1) First Open the Java Doc, and we'll see a description of the Random class:
An instance of this class is used to generate a pseudo-random number stream, which uses a 48-bit seed that can be modified with a linear congruence formula (see Donald Knuth's "The Art of computer programming, Volume 2", section 3.2.1).
If you create two Random instances with the same seed, the same method call sequence is made for each instance, and they will generate and return the same sequence of numbers. To ensure this, we specify a specific algorithm for the class random. For the full portability of Java code, the Java implementation must have the class Random use all the algorithms shown here. However, subclasses of the Random class are allowed to use other algorithms as long as they conform to the general contract of all methods.
Java Doc has explained the random class very well, and our tests have verified this.
(2) If no seed number is provided, the seed number of the random instance will be the number of milliseconds of the current time, which can be obtained by System.currenttimemillis () to obtain the current time in milliseconds. Open the source code of the JDK and we can see it very clearly.
/**
* Creates a new random number generator. Its seed was initialized to
* A value based on the current time:
* Random () {This (System.currenttimemillis ());} Java.lang.system#currenttimemillis ()
*/
Public Random () {This (System.currenttimemillis ());}
Other than that:
Description of the Nextint (), nextint (int n) method of the Random object:
int Nextint ()
Returns the next pseudo-random number, which is an int value that is evenly distributed in the sequence of this random number generator.
int nextint (int n)
Returns a pseudo-random number, which is an int value that is taken out of the sequence of this random number generator, evenly distributed between 0 (inclusive) and a specified value (not included).
Transferred from: http://www.blogjava.net/cool2009/archive/2009/03/15/259882.html
correct your little mistake .With seeds:
This way, no matter how many times the program runs, the result is the same
public static void Main (string[] args) {
Java.util.Random r=new Java.util.Random (10);
for (int i=0;i<10;i++) {
System.out.println (R.nextint ());
}
}
This place actually produces a different random number; it should be written like this.
public static void Main (string[] args) {
Java.util.Random r=new Java.util.Random (10);
for (int i=0;i<10;i++) {
System.out.println (R.nextint ());
}
Java.util.Random r2=new Java.util.Random (10);
for (int i=0;i<10;i++) {
System.out.println (R2.nextint ());
}
}
The code that writes this random number produces the same, and the result is as follows
-1157793070
1913984760
1107254586
1773446580
254270492
-1408064384
1048475594
1581279777
-778209333
1532292428
-1157793070
1913984760
1107254586
1773446580
254270492
-1408064384
1048475594
1581279777
-778209333
1532292428
Several ways in which Java generates random numbers