Javarandom随机数种⼦
⼀、概述
(1)java.util.Random.Random()
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
Creates a new random number generator. This constructor sets the seed of the random number generator to a value very likely to be distinct from
创建⼀个新的随机数⽣成器。该构造函数设置随机数种⼦的⽅式⾮常不同于其他的构造函数。
(2)java.util.Random.Random(long seed)
Creates a new random number generator using a single long seed. The seed is the initial value of the internal state of the pseudorandom number generato 使⽤⼀个随机数种⼦,创建⼀个新的随机数⽣成
器。该种⼦是由next函数维护的伪随机数⽣成器的内部状态的初始值。
(3)int java.Int(int bound)
Returns a pseudorandom, uniformly distributed int value between0 (inclusive) and the specified value (exclusive), drawn from this random number
返回⼀个从随机数⽣成序列提取的均匀分布在0(包括)和bound指定的值(不包括)的伪随机数。nextInt函数约定了在指定范围内的⼀个
整数被伪随机的产⽣并返回。所有区域范围内的值都有⼀个(⼤致)相同的⽣成概率。
⼆、代码实战
package st;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
int bound = 10;
Random random = new Random();
for(int i=0;i<10;i++) {
int value = Int(bound);
System.out.println(value+"");
}
System.out.println("====================");
//不⽤currentTimeMillis的原因是:当多线程调⽤时,由于CPU速率很快,因此currentTimeMillis很可能相等,使得随机数结果也会相等
//      long seed1 = System.currentTimeMillis();
//nanoTime()返回最准确的可⽤系统计时器的当前值,以毫微秒为单位。此⽅法只能⽤于测量已过的时间,与系统或钟表时间的其他任何时间概念⽆关。
long seed1 = System.nanoTime();
Random seedRandom1 = new Random(seed1);
for(int i=0;i<10;i++) {
/*
产⽣⼀个[0,bound)之间的随机数
设a<b, 要产⽣⼀个[a,b)之间的随机数的公式为:
int value = a + Int(b-a);
*/
int value = Int(bound);
System.out.println(value+"");
}
System.out.println("====================");
long seed2 = 10;
//当种⼦⼀样的时候,虽然每次nextXXX的⽅法会返回不同的结果,但是由于每次new Random(相同的seed)创建的“随机数⽣成器”都相同,因此之后产⽣的        Random seedRandom2 = new Random(seed2);
for(int i=0;i<10;i++) {
int value = Int(bound);
System.out.println(value+"");
}
}
java生成随机数的方法}
三、运⾏截图(这⾥我运⾏了3次)
从运⾏结果可以看出当“随机数种⼦”相同的时候,每次调⽤该函数产⽣的结果都⼀样,所以在实际运⾏环境中,我们应该避免使⽤相同的随机数种⼦,常⽤的⽅法就是使⽤System.nanoTime来为作为种⼦。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。