java random.nextbytes_Java Random类
首頁(yè)?>?基礎(chǔ)教程?>?常用類?>?常用 Random類
Java Random類
Random類中實(shí)現(xiàn)的隨機(jī)算法是偽隨機(jī),也就是有規(guī)則的隨機(jī)。在進(jìn)行隨機(jī)時(shí),隨機(jī)算法的起源數(shù)字稱為種子數(shù)(seed),在種子數(shù)的基礎(chǔ)上進(jìn)行一定的變換,從而產(chǎn)生需要的隨機(jī)數(shù)字。
相同種子數(shù)的Random對(duì)象,相同次數(shù)生成的隨機(jī)數(shù)字是完全相同的。也就是說(shuō),兩個(gè)種子數(shù)相同的Random對(duì)象,第一次生成的隨機(jī)數(shù)字完全相同,第二次生成的隨機(jī)數(shù)字也完全相同。這點(diǎn)在生成多個(gè)隨機(jī)數(shù)字時(shí)需要特別注意。
構(gòu)造方法
public Random()
public Random(long seed)
第一個(gè)構(gòu)造方法使用一個(gè)和當(dāng)前系統(tǒng)時(shí)間對(duì)應(yīng)的相對(duì)時(shí)間有關(guān)的數(shù)字作為種子數(shù),然后使用這個(gè)種子數(shù)構(gòu)造Random對(duì)象。
第二個(gè)構(gòu)造方法可以通過(guò)制定一個(gè)種子數(shù)進(jìn)行創(chuàng)建。
方法
boolean nextBoolean() //返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的boolean值。
void nextBytes(byte[] bytes) //生成隨機(jī)字節(jié)并將其置于用戶提供的 byte 數(shù)組中。
double nextDouble() //返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布的 double值。
float nextFloat() //返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布float值。
double nextGaussian() //返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、呈高斯(“正態(tài)”)分布的double值,其平均值是0.0標(biāo)準(zhǔn)差是1.0。
int nextInt() //返回下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值。
int nextInt(int n) //返回一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在(包括和指定值(不包括)之間均勻分布的int值。
long nextLong() //返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的 long 值。
void setSeed(long seed) //使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。
例子
Random使用一個(gè)48位的種子,如果兩個(gè)Random類的實(shí)例是同一個(gè)種子創(chuàng)建的額,對(duì)它們以同樣的順序調(diào)用,將會(huì)參數(shù)同樣的隨機(jī)數(shù)
import java.util.Random;
public class Test {
public static void main(String[] args) throws Exception
{
Random r1=new Random(45);
Random r2=new Random(45);
System.out.println(r1.nextFloat()+";"+r2.nextFloat());
System.out.println(r1.nextInt()+";"+r2.nextInt());
System.out.println(r1.nextLong()+";"+r2.nextLong());
System.out.println(r1.nextBoolean()+";"+r2.nextBoolean());
}
}
結(jié)果是
0.7269366;0.7269366
-266757034;-266757034
-2397444879181054479;-2397444879181054479
false;false
結(jié)果完全一樣。值得指出的是當(dāng)使用默認(rèn)的種子構(gòu)造隨機(jī)數(shù)時(shí),它們屬于同一個(gè)種子
從運(yùn)行結(jié)構(gòu)來(lái)看,如果連個(gè)Random對(duì)象的種子相同,而且方法的調(diào)用順序也相同,則它們會(huì)產(chǎn)生同樣的數(shù)字序列,也就是說(shuō),Random產(chǎn)生的不是真正的隨機(jī)數(shù),而是偽隨機(jī)數(shù)。為了避免兩個(gè)Random對(duì)象產(chǎn)生同樣的數(shù)字序列,我們可以使用當(dāng)前時(shí)間作為種子Random r=new Random(System.currentTimeMillis());
版權(quán)聲明:本文為JAVASCHOOL原創(chuàng)文章,未經(jīng)本站允許不得轉(zhuǎn)載。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java random.nextbytes_Java Random类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息学奥赛一本通 提高篇 第6章 平衡树
- 下一篇: 并发200_一种单机支持 JavaWeb