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

 

posted @ 2022-04-13 11:03  r1-12king  阅读(220)  评论(0编辑  收藏  举报