Random类(java.util)
Random类产生随机数的算法是一种伪随机算法,在进行产生随机数时,随机算法通过起源数字(seed)或叫种子数进行一系列的变换,产生随机数。所以相同种子数在相同次数产生的随机数是相同的。
1 构造方法
(1)public Random()
该构造方法会使用系统当前时间的相关数字作为产生随机数的种子数并利用该种子数产生随机数;
(2)public Random(long seed)
该构造方法允许使用者自定义一个种子数并利用该种子数产生随机数,需要注意的是,种子数与产生随机数的大小或者范围无关;
示例:
Random random = new Random();
Random randomseed = new Random(1234);
2 常用方法
Random类中的方法生成的随机数是均匀分布的,即区间内所有数字出现的几率相等。
(1)boolean nextBoolean()
该方法用于生成随机的boolean值,即随机生成true或者false;
示例:
import java.util.Random;
public class Practice08 {
public static void main(String[] args){
Random random = new Random();
Random randomseed = new Random(1234);
for(int i=0;i<10;i++){
System.out.println(random.nextBoolean());
}
System.out.println("******************************");
for(int i=0;i<10;i++){
System.out.println(randomseed.nextBoolean());
}
}
}
运行结果:
第一次运行 | 第二次运行 |
false true false false true true false false false true ****************************** true false true false true false false true false false | false true false true false false false false true true ****************************** true false true false true false false true false false |
可以看出调用Random()方法时,两次运行产生的随机数是随机的,而调用Random(long seed)方法时,两次运行产生的十个随机数分别相等。
(2)double nextDouble()
该方法用于生成随机的double值,范围为[0,1.0),包含0但不包含1.0;
示例:
import java.util.Random;
public class Practice08 {
public static void main(String[] args){
Random random = new Random();
Random randomseed = new Random(1234);
for(int i=0;i<10;i++){
System.out.println(random.nextDouble());
}
System.out.println("******************************");
for(int i=0;i<10;i++){
System.out.println(randomseed.nextDouble());
}
}
}
运行结果:
第一次运行 | 第二次运行 |
0.4968216373378379 0.5734949373550408 0.852019908272346 0.20984030302187273 0.494558093099853 0.5825247266138449 0.28886773288711476 0.21403791865578403 0.5555841783678891 0.5108997276326334 ****************************** 0.6465821602909256 0.9513577109193919 0.8575884598068334 0.45823330506267057 0.3359524025416939 0.20387478195313158 0.34690742873967684 0.617314071997303 0.9468595742485053 0.015899959834469013 | 0.45977052333535995 0.47629177906094133 0.47446627537727315 0.8193334158480784 0.15775686431494962 0.27063984166744404 0.04724094155787517 0.6572915775899207 0.6461783009794345 0.7266385810244602 ****************************** 0.6465821602909256 0.9513577109193919 0.8575884598068334 0.45823330506267057 0.3359524025416939 0.20387478195313158 0.34690742873967684 0.617314071997303 0.9468595742485053 0.015899959834469013 |
可以看出调用Random()方法时,两次运行产生的随机数是随机的,而调用Random(long seed)方法时,两次运行产生的十个随机数分别相等。
(3)int nextInt()
该方法用于生成随机的int值;
示例:
import java.util.Random;
public class Practice08 {
public static void main(String[] args){
Random random = new Random();
Random randomseed = new Random(1234);
for(int i=0;i<10;i++){
System.out.println(random.nextInt());
}
System.out.println("******************************");
for(int i=0;i<10;i++){
System.out.println(randomseed.nextInt());
}
}
}
运行结果:
第一次运行 | 第二次运行 |
2007915930 -822650973 -1946162266 -1747680144 1250932849 1518101712 1448991956 1020489311 -35838754 2064277798 ****************************** -1517918040 1115789266 -208917030 1019800440 -611652875 1362132786 1968097058 -1933932397 1442904595 397902075 | -1309824681 -106227231 -1832307327 1208237010 -696335126 1855533443 -1890017889 119486610 -1620495240 1199312626 ****************************** -1517918040 1115789266 -208917030 1019800440 -611652875 1362132786 1968097058 -1933932397 1442904595 397902075 |
可以看出调用Random()方法时,两次运行产生的随机数是随机的,而调用Random(long seed)方法时,两次运行产生的十个随机数分别相等。
(4)int nextInt(int bound)
该方法用于生成随机的int值,范围为[0,bound);
示例:
import java.util.Random;
public class Practice08 {
public static void main(String[] args){
Random random = new Random();
Random randomseed = new Random(1234);
for(int i=0;i<10;i++){
System.out.println(random.nextInt(100));
}
System.out.println("******************************");
for(int i=0;i<10;i++){
System.out.println(randomseed.nextInt(100));
}
}
}
运行结果:
第一次运行 | 第二次运行 |
71 82 88 39 39 60 59 6 8 14 ****************************** 28 33 33 20 10 93 29 49 97 37 | 54 91 91 96 55 36 99 7 85 33 ****************************** 28 33 33 20 10 93 29 49 97 37 |
可以看出调用Random()方法时,两次运行产生的随机数是随机的,而调用Random(long seed)方法时,两次运行产生的十个随机数分别相等。
(5)void setSeed(long seed)
该方法用于给没有设置种子数的对象设置种子数;
示例:
import java.util.Random;
public class Practice08 {
public static void main(String[] args){
Random random = new Random();
for(int i=0;i<10;i++){
System.out.println(random.nextInt(100));
}
System.out.println("******************************");
random.setSeed(1234);
for(int i=0;i<10;i++){
System.out.println(random.nextInt(100));
}
}
}
运行结果:
第一次运行 | 第二次运行 |
24 63 87 68 31 77 34 90 23 36 ****************************** 28 33 33 20 10 93 29 49 97 37 | 6 16 80 39 14 43 27 73 1 59 ****************************** 28 33 33 20 10 93 29 49 97 37 |