java 随机数
前言
Java产生可以随机数的有两个类,一个是Random类,另一个是Math类中的random()方法。
Random 类提供了丰富的随机数生成方法,可以产生 boolean、int、long、float、byte 数组以及 double 类型的随机数,这是它与 random() 方法最大的不同之处。random() 方法只能产生 double 类型的 0~1 的随机数。
一、Random类
构造方法
1 // 创建一个新的随机数生成器。 2 Random() 3 4 // 使用单个 long种子创建一个新的随机数生成器。 5 Random(long seed)
Random 类的常用方法
boolean nextBoolean() 生成一个随机的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble() 生成一个随机的 double 值,数值介于 [0,1.0),含 0 而不包含 1.0
int nextlnt() 生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果需要生成指定区间的 int 值,则需要进行一定的数学变换
int nextlnt(int n) 生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成指定区间的 int 值,也需要进行一定的数学变换
void setSeed(long seed) 重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象和相同种子数使用 new 关键字创建出的 Random 对象相同
long nextLong() 返回一个随机长整型数字
boolean nextBoolean() 返回一个随机布尔型值
float nextFloat() 返回一个随机浮点型数字
double nextDouble() 返回一个随机双精度值
测试代码如下:
1 public static void main(String[] args) { 2 Random r = new Random(); 3 double d1 = r.nextDouble(); // 生成[0,1.0]区间的小数 4 double d2 = r.nextDouble() * 7; // 生成[0,7.0]区间的小数 5 int i1 = r.nextInt(10); // 生成[0,10]区间的整数 6 int i2 = r.nextInt(18) - 3; // 生成[-3,15)区间的整数 7 long l1 = r.nextLong(); // 生成一个随机长整型值 8 boolean b1 = r.nextBoolean(); // 生成一个随机布尔型值 9 float f1 = r.nextFloat(); // 生成一个随机浮点型值 10 System.out.println("生成的[0,1.0]区间的小数是:" + d1); 11 System.out.println("生成的[0,7.0]区间的小数是:" + d2); 12 System.out.println("生成的[0,10]区间的整数是:" + i1); 13 System.out.println("生成的[-3,15]区间的整数是:" + i2); 14 System.out.println("生成一个随机长整型值:" + l1); 15 System.out.println("生成一个随机布尔型值:" + b1); 16 System.out.println("生成一个随机浮点型值:" + f1); 17 }
结果为
1 生成的[0,1.0]区间的小数是:0.9051058491815958 2 生成的[0,7.0]区间的小数是:4.145097564953177 3 生成的[0,10]区间的整数是:0 4 生成的[-3,15]区间的整数是:13 5 生成一个随机长整型值:-6662474542992193720 6 生成一个随机布尔型值:true 7 生成一个随机浮点型值:0.60368794
二、Math.random()方法
生成的随机数和Random类的nextDouble()类似,也是16位有限小数。
例如:输出5个0-1区间的16位有限小数的随机数。
1 public class MathTest { 2 public static void main(String[] args) { 3 for(int i=0;i<5;i++) { 4 double temp = Math.random(); 5 System.out.println(temp); 6 } 7 } 8 }
结果为
1 0.51673048153968 2 0.5422212305057984 3 0.6280588207077087 4 0.034840850776311716 5 0.487022254998729