模拟中奖(一):随机数的生成——random的运用

彩票对于人们来说一直都是一个“梦想”,人们都想着能够一夜暴富,毫无疑问,彩票是最美好的假想。那么,你想中彩票吗?

吃瓜群众:想!快拿钱砸我吧!

程序员:没兴趣,天底下没有真正的随机事件。

哈哈,对于普罗大众来说,中彩票就好似一件随机的事情,既然是随机的,那么为什么中彩票的人不能是我呢?梦想还是要有的,万一实现了呢?

但是对于程序员来说,世界上没有真正的随机事件,也没有真正的随机数。

随机数的生成主要有三个方法:

1、通过Math.random()返回一个0到1之间的double值。

se中提供了Math.random()方法,这个方法可以产生一个0-1之间的double随机数。我们可以将它作为一个模板,如果想要获得别的范围里的随机数,我们乘以一定的数值,比如说,我想获得一个0-100之间的随机数,那就乘以100,得到的就是个100以内的随机数。

2、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。

在System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,拿他对一些数取模,可以把他限制在一个范围之内。

3、通过Random类来产生一个随机数

java.util这个包里面提供了一个Random的类。我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long,这个也是我们在j2me的程序里经常用的一个取随机数的方法。

此外,random对象包含nextInt(),nextInt(int n)方法: 


int nextInt()  
    返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。  
int nextInt(int n)  
    返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。

注:传递给nextInt()的参数设置了所产生随机数的上限,而其下限为0.

java.util.Random类有两种方式构建方式:带种子和不带种子

不带种子:

此种方式将会返回随机的数字,每次运行结果不一样。

public class RandomTest {

public static void main(String[] args) {

java.util.Random r=new java.util.Random();

for(int i=0;i<10;i++){

System.out.println(r.nextInt());

}

}

带种子:

此种方式,无论程序运行多少次,返回结果都是一样的。

public static void main(String[] args) {

java.util.Random r=new java.util.Random(10);

for(int i=0;i<10;i++){

System.out.println(r.nextInt());

}

}

也就是说,随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。在相同的平台环境下,编译生成exe后,每次运行它,显示的随机数都是一样的。这是因为在相同的编译平台环境下,由随机种子生成随机数的计算方法都是一样的,再加上随机种子一样,所以产生的随机数就是一样的。如果没有设定随机种子,Random实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。

所以,对于彩票能不能中,“梦想还是要有的,万一随机数出错了呢?”

猜你喜欢

转载自blog.csdn.net/Searchin_R/article/details/82860652
今日推荐