志在指尖
用双手敲打未来

java随机数(java随机数random怎么用)

java随机数

java的三种随机数生成办法
随机数的发生在一些代码中很常用,也是我们必需求掌握的。而java中发生随机数的办法主要有三种:
第一种:newRandom()
第二种:Math.random()
第三种:currentTimeMillis()
第一种
第一种需求凭借java.util.Random类来发生一个随机数发生器,也是最常用的一种,结构函数有两个,Random()和Random(longseed)。第一个便是以当前时刻为默许种子,第二个是以指定的种子值进行。发生之后,凭借不同的句子发生不同类型的数。
种子便是发生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且发生的随机数均匀的散布在空间中。以后发生的随机数都与前一个随机数有关。以代码为例。java
publicstaticvoidmain(String[]args){
Randomr=newRandom(1);
for(inti=0;i<5;i++)
{
intran1=r.nextInt(100);
System.out.println(ran1);
}
}
在我的编译器下发生的五个数均为85,88,47,13,54,如果选用Randomr=newRandom(),发生的随机数就不同,这便是确定种子导致的结果。
第二种
而第二种办法返回的数值是[0.0,1.0)的double型数值,因为double类数的精度很高,可以在必定程度下看做随机数,凭借(int)来进行类型转化就可以得到整数随机数了,代码如下。
publicstaticvoidmain(String[]args){intmax=100,min=1;intran2=(int)(Math.random()*(max-min)+min);
System.out.println(ran2);
}
第三种
至于第三种办法尽管不常用,但是也是一种思路。办法返回从1970年1月1日0时0分0秒(这与UNIX系统有关)到现在的一个long型的毫秒数,取模之后即可得到所需范围内的随机数。
publicstaticvoidmain(String[]args){intmax=100,min=1;longrandomNum=System.currentTimeMillis();intran3=(int)(randomNum%(max-min)+min);
System.out.println(ran3);
}

java随机数random怎么用

Random类(java.util)
Random类中完成的随机算法是伪随机,也便是有规则的随机。在进行随机时,随机算法的来源数字称为种子数(seed),在种子数的基础上进行必定的变换,从而产生需求的随机数字。
相同种子数的Random目标,相同次数生成的随机数字是完全相同的。也便是说,两个种子数相同的Random目标,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需求特别注意。
下面介绍一下Random类的运用,以及怎么生成指定区间的随机数组以及完成程序中要求的几率。
1、Random目标的生成
Random类包括两个结构办法:
办法名
效果
publicRandom()该结构办法运用一个和当前系统时刻对应的相对时刻有关的数字作为种子数,然后运用这个种子数结构Random目标。
publicRandom(longseed)该结构办法能够经过拟定一个种子数进行创立。
示例代码:
Randomr=newRandom();
Randomr1=newRandom(10);
强调:种子数仅仅随机算法的来源数字,和生成的随机数字的区间无关。
2、Random类中的常用办法
Random类中各办法生成的随机数字都是均匀分布的,也便是区间内部的数字生成的几率是均等的。
下面对这些办法做一下基本的介绍:
办法名
效果
publicbooleannextBoolean()
该办法的效果是生成一个随机的boolean值,生成true和false的值几率相等,也便是都是50%的几率。
publicdoublenextDouble()该办法的效果是生成一个随机的double值,数值介于[0,1.0)之间。
publicnextBytes(byte[]bytes)会为一个byte类型的数组随机赋值
publicintnextInt()
该办法的效果是生成一个随机的int值,该值介于int的区间,也便是-231到231-1之间。
假如需求生成指定区间的int值,则需求进行必定的数学变换,详细能够参看下面的运用示例中的代码。
publicintnextInt(intn)该办法的效果是生成一个随机的int值,该值介于[0,n)的区间,也便是0到n之间的随机int值,包括0而不包括n。
publicvoidsetSeed(longseed)该办法的效果是重新设置Random目标中的种子数。设置完种子数以后的Random目标和相同种子数运用new关键字创立出的Random目标相同。
publicfloatnextFloat();用于从该随机值生成器生成介于0.0和1.0之间的下一个伪随机浮点值。
3、Random类运用示例
运用Random类,一般是生成指定区间的随机数字运用办法如下:
(1)publicbooleannextBoolean()生成true和false的值几率相等,也便是都是50%的几率。
Randomrandomno=newRandom();
booleanvalue=randomno.nextBoolean();
(2)publicdoublenextDouble()生成一个随机的double值
该办法的效果是生成一个随机的double值,数值介于[0,1.0)之间。
生成[0,1.0)区间的小数:
Randomr=newRandom();
doubled1=r.nextDouble();
生成[0,5.0)区间的小数:doubled2=random.nextDouble()*5;
Randomr=newRandom();
doubled2=random.nextDouble()*5;
生成[1,2.5)区间的小数:
Randomr=newRandom();
doubled3=r.nextDouble()*1.5+1;
(3)publicintnextInt(intn)生成恣意整数
生成一个随机介于[0,n)的int值,包括0而不包括n。
生成[0,10)区间的整数:
intn2=r.nextInt(10);
n2=Math.abs(r.nextInt()%10);
相对于整数区间,[0,10]区间和[0,11)区间等价,所以即生成[0,11)区间的整数。
生成[0,10]区间的整数:
intn3=r.nextInt(11);
n3=Math.abs(r.nextInt()%11);
以上两行代码均可生成[0,10)区间的整数。
第一种完成运用Random类中的nextInt(intn)办法直接完成。
第二种完成中,首要调用nextInt()办法生成一个恣意的int数字,该数字和10取余以后生成的数字区间为(-10,10),然后再对该区间求绝对值,则得到的区间便是[0,10)了。
同理,生成恣意[0,n)区间的随机整数,都能够运用如下代码:
intn2=r.nextInt(n);
n2=Math.abs(r.nextInt()%n);
生成[-3,15)区间的整数
intn4=r.nextInt(18)-3;
n4=Math.abs(r.nextInt()%18)-3;
生成非从0开端区间的随机整数,能够参看上面非从0开端的小数区间完成原理的说明。
(4)几率完成
依照必定的几率完成程序逻辑也是随机处理能够处理的一个问题。下面以一个简单的示例演示怎么运用随机数字完成几率的逻辑。
在前面的办法介绍中,nextInt(intn)办法中生成的数字是均匀的,也便是说该区间内部的每个数字生成的几率是相同的。那么假如生成一个[0,100)区间的随机整数,则每个数字生成的几率应该是相同的,而且由于该区间中总计有100个整数,所以每个数字的几率都是1%。依照这个理论,能够完成程序中的几率问题。示例:随机生成一个整数,该整数以55%的几率生成1,以40%的几率生成2,以5%的几率生成3。完成的代码如下:
intn5=r.nextInt(100);
intm;//结果数字
if(n5<55){//55个数字的区间,55%的几率
m=1;
}elseif(n5<95){//[55,95),40个数字的区间,40%的几率
m=2;
}else{
m=3;
}
由于每个数字的几率都是1%,则恣意55个数字的区间的几率便是55%,为了代码方便书写,这儿运用[0,55)区间的一切整数,后续的原理相同。
当然,这儿的代码能够简化,由于几率都是5%的倍数,所以只要以5%为基础来控制几率即可,下面是简化的代码完成:
intn6=r.nextInt(20);
intm1;
if(n6<11){
m1=1;
}elseif(n6<19){
m1=2;
}else{
m1=3;
}
在程序内部,几率的逻辑就能够依照上面的说明进行完成。
(5)其它问题
相同种子数Random目标问题
前面介绍过,相同种子数的Random目标,相同次数生成的随机数字是完全相同的,下面是测试的代码:
Randomr1=newRandom(10);
Randomr2=newRandom(10);
for(inti=0;i<2;i++){
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
}
在该代码中,目标r1和r2运用的种子数都是10,则这两个目标相同次数生成的随机数是完全相同的。
假如想避免出现随机数字相同的情况,则需求注意,不管项目中需求生成多少个随机数字,都只运用一个Random目标即可。
关于Math类中的random办法
其实在Math类中也有一个random办法,该random办法的作业是生成一个[0,1.0)区间的随机小数。
经过阅览Math类的源代码能够发现,Math类中的random办法便是直接调用Random类中的nextDouble办法完成的。
仅仅random办法的调用比较简单,所以很多程序员都习气运用Math类的random办法来生成随机数字。

未经允许不得转载:IT技术网站 » java随机数(java随机数random怎么用)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载