本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。
广义上讲,Java中的随机数的有三种产生方式
:
(01).通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。
(02).通过Math.random()返回一个0到1之间的double值。
(03).通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。第1种
通过System.currentTimeMillis()来获取随机数。实际上是获取当前时间毫秒数,它是long类型。使用方法如下:
finallongl=System.currentTimeMillis();若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0,100)之间的int整数。方法如下:
finallongl=System.currentTimeMillis(); finalinti=(int)(l%100);第2种
通过Math.random()来获取随机数。实际上,它返回的是0(包含)到1(不包含)之间的double值。使用方法如下:
finaldoubled=Math.random();若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0,100)之间的int整数。方法如下:
finaldoubled=Math.random(); finalinti=(int)(d*100);第3种
通过Random类来获取随机数。
使用方法如下:
(01)**创建Random对象。**有两种方法可以创建Random对象,如下: Randomrandom=newRandom();//默认构造方法 Randomrandom=newRandom(1000);//指定种子数字(02)**通过Random对象获取随机数。**Random支持的随机值类型包括:boolean,byte,int,long,float,double。
比如,获取[0,100)之间的int整数。方法如下: inti2=random.nextInt(100);Random的函数接口
//构造函数(一):创建一个新的随机数生成器。 Random() //构造函数(二):使用单个long种子创建一个新随机数生成器:publicRandom(longseed){setSeed(seed);}next方法使用它来保存随机数生成器的状态。 Random(longseed) booleannextBoolean()//返回下一个“boolean类型”伪随机数。 voidnextBytes(byte[]buf)//生成随机字节并将其置于字节数组buf中。 doublenextDouble()//返回一个“[0.0,1.0)之间的double类型”的随机数。 floatnextFloat()//返回一个“[0.0,1.0)之间的float类型”的随机数。 intnextInt()//返回下一个“int类型”随机数。 intnextInt(intn)//返回一个“[0,n)之间的int类型”的随机数。 longnextLong()//返回下一个“long类型”随机数。 synchronizeddoublenextGaussian()//返回下一个“double类型”的随机数,它是呈高斯(“正常地”)分布的double值,其平均值是0.0,标准偏差是1.0。 synchronizedvoidsetSeed(longseed)//使用单个long种子设置此随机数生成器的种子。获取随机数示例
下面通过示例演示上面3种获取随机数的使用方法。
源码如下(RandomTest.java): 1importjava.util.Random; 2importjava.lang.Math; 3 4/** 5*java的随机数测试程序。共3种获取随机数的方法: 6*(01)、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 7*(02)、通过Math.random()返回一个0到1之间的double值。 8*(03)、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。 9* 10*@authorskywang 11*@emailkuiwu-wang@163.com 12*/ 13publicclassRandomTest{ 14 15publicstaticvoidmain(Stringargs[]){ 16 17//通过System的currentTimeMillis()返回随机数 18testSystemTimeMillis(); 19 20//通过Math的random()返回随机数 21testMathRandom(); 22 23//新建“种子为1000”的Random对象,并通过该种子去测试Random的API 24testRandomAPIs(newRandom(1000),"1stRandom(1000)"); 25testRandomAPIs(newRandom(1000),"2ndRandom(1000)"); 26//新建“默认种子”的Random对象,并通过该种子去测试Random的API 27testRandomAPIs(newRandom(),"1stRandom()"); 28testRandomAPIs(newRandom(),"2ndRandom()"); 29} 30 31/** 32*返回随机数-01:测试System的currentTimeMillis() 33*/ 34privatestaticvoidtestSystemTimeMillis(){ 35//通过 36finallongl=System.currentTimeMillis(); 37//通过l获取一个[0,100)之间的整数 38finalinti=(int)(l%100); 39 40System.out.printf("\n----System.currentTimeMillis()----\nl=%si=%s\n",l,i); 41} 42 43 44/** 45*返回随机数-02:测试Math的random() 46*/ 47privatestaticvoidtestMathRandom(){ 48//通过Math的random()函数返回一个double类型随机数,范围[0.0,1.0) 49finaldoubled=Math.random(); 50//通过d获取一个[0,100)之间的整数 51finalinti=(int)(d*100); 52 53System.out.printf("\n----Math.random()----\nd=%si=%s\n",d,i); 54} 55 56 57/** 58*返回随机数-03:测试Random的API 59*/ 60privatestaticvoidtestRandomAPIs(Randomrandom,Stringtitle){ 61finalintBUFFER_LEN=5; 62 63//获取随机的boolean值 64booleanb=random.nextBoolean(); 65//获取随机的数组buf[] 66byte[]buf=newbyte[BUFFER_LEN]; 67random.nextBytes(buf); 68//获取随机的Double值,范围[0.0,1.0) 69doubled=random.nextDouble(); 70//获取随机的float值,范围[0.0,1.0) 71floatf=random.nextFloat(); 72//获取随机的int值 73inti1=random.nextInt(); 74//获取随机的[0,100)之间的int值 75inti2=random.nextInt(100); 76//获取随机的高斯分布的double值 77doubleg=random.nextGaussian(); 78//获取随机的long值 79longl=random.nextLong(); 80 81System.out.printf("\n----%s----\nb=%s,d=%s,f=%s,i1=%s,i2=%s,g=%s,l=%s,buf=[", 82title,b,d,f,i1,i2,g,l); 83for(bytebt:buf) 84System.out.printf("%s,",bt); 85System.out.println("]"); 86} 87}本文内容总结:
原文链接:https://www.cnblogs.com/skywang12345/p/3341423.html