Math.random()方法
static double random()
Math.random()默认产生大于等于0.0且小于1.0之间的随机double型随机数,即介于[0,1)
实例
public class Test{
public static void main(String args[]){
System.out.println( Math.random() );
System.out.println( Math.random() );
}
}
编译以上程序,输出结果为:
0.5444085967267008
0.7960235983184115
Random类
构造方法
Random randomValue = new Random();
在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。
在Random类中有两种构造方法:
- Random()无参构造方法,用于创建一个伪随机数生成器。
- Random(long seed)有参构造方法,使用一个long类型的seed种子创建伪随机数生成器。
区别:
我们知道计算机时无法生成真正的随机数的,计算机只能生成伪随机数,而不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。所以Random类两种构造方法的区别在于种子(seed)
无参构造方法
**无参构造方法其实是以系统当前时间作为随机数生成的种子(**自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数),每毫秒都在变换,所以每次种子都不一样,生成的随机数也就不一样。
import java.util.Random;
public class Demo{
public static void main(String[] args){
Random r=new Random();//以系统当前时间作为随机数生成的种子
for(int i=0;i<8;i++){//生成8个随机数
System.out.print(r.nextInt(100)+" ");//生成[0,100)的整数随机数
}
}
}
编译以上程序,输出结果为:
7 24 12 39 1 50 33 45
再次编译
3 30 22 37 88 45 14 20
有参构造方法则是自己指定种子,如果每次的种子相同,那么生成的随机数也相同。
import java.util.Random;
public class Demo{
public static void main(String[] args){
Random r=new Random(10);//自定义随机数种子
for(int i=0;i<8;i++){//生成8个随机数
System.out.print(r.nextInt(100)+" ");//生成[0,100)的整数随机数
}
}
}
编译以上程序,输出结果为:
13 80 93 90 46 56 97 88
再次编译
13 80 93 90 46 56 97 88
Random类的常用方法nextInt():
nextInt()方法会随机生成一个整数,这个整数的范围就是int类型的范围-231 ~ 231-1,但是如果在nextInt()括号中加入一个整数N那么,这个随机生成的随机数范围就变成**[0,N)**。
Random类的其他方法
方法 | 描述 |
---|---|
double nextDouble() | 返回0.0至1.0之间的double类型值 |
float nextFloat() | 返回0.0至1.0之间的float类型值 |
int nextInt(int n) | 返回 [ 0 , n ) [0,n) [0,n)之间的int值 |
int nextInt() | 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值 |
long nextLong() | 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值 |
protected int next(int bits) | 生成下一个伪随机数 |
boolean nextBoolean() | 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值 |
void nextBytes(byte[] bytes) | 生成随机字节并将其置于用户提供的 byte 数组中 |
double nextGaussian() | 返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其期望是0.0标准差是1.0 |
void setSeed(long seed) | 使用单个 long 种子设置此随机数生成器的种子 |