Java随机数常用的两种生成方式:
一、Math.random( );查看API可以得知:
static double | random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0 。 |
简单的来说就是通过Math.random()返回一个[0,1)之间的double值。由于double类数的精度很高,可以在一定程度下看做随机数,借助(int)来进行类型转换就可以得到整数随机数了,代码如下。
double random = Math.random();
//double类型
System.out.println("[0,1)区间内的随机数: "+random);
如果要int类型的值,强制类型转换为int就可以,int ran = (int) random; 但强转后,random的值肯定为0;这是因为[0,1)区间内向下取整;
下面从需求出发:生成一个1~50的随机数;
//生成一个1~50的随机数;
int random = (int)(Math.random()*50+1);
System.out.println(random);
上述代码:Math.random( )*50后,值的范围在[0,50)内;进行加一操作后为[1,51);转化为int类型则为[1,50];
扩展:生成指定范围内的随机数:
//生成指定范围内的随机数: [75,100];
int max = 100;
int min = 75;
int random = (int)(Math.random()*(max-min+1)+min);
System.out.println(random);
二、通过New Random( )来生成随机数
同样的操作,先查看API:可看构造方法等方法摘要;
构造方法摘要 | |
---|---|
Random() 创建一个新的随机数生成器。 | |
Random(long seed) 使用单个 long 种子创建一个新的随机数生成器。 |
1、创建Random对象;
Random random = new Random( );
Random random = new Random(20);
2、 通过Random对象获取随机数。Random支持的随机值类型包括:boolean, byte, int, long, float, double。比如,获取[0, 100)之间的int整数。方法如下:
int num = random.nextInt(100);
直接从需求入手:通过Random类求3~8的数;
public class RandomTest {
public static void main(String[] args) {
int ran = getRandom(3,8);
System.out.println(ran);
}
private static int getRandom(int start, int end) {
Random random = new Random();
int ran = random.nextInt(end-start+1)+start;
return ran;
}
}
最后:对上述Randon(seed)有参构造方法解释:在API中可以看到调用 new Random(seed)
等效于:
Random rnd = new Random();
rnd.setSeed(seed);
注意:Random 的一个特点是:相同种子数的Random对象,对应相同次数生成的随机数字是完全相同的;读者可以自行测试一下,传入了种子对象后,随机数的后续运行结果都是一样的。