-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 營銷推廣 > 專題列表 > 正文
- JAVA中隨機(jī)數(shù)是哪個(gè)類來完成的?謝謝
- 請(qǐng)高人指教java中random函數(shù)的詳細(xì)知識(shí)!本人不勝感激!謝謝了!
- java random 和 random的區(qū)別
- import java.util.Random什么意思
- 偽隨機(jī)數(shù)的生成方法
生成偽隨機(jī)數(shù)的類的類(生成偽隨機(jī)數(shù)的程序)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于生成偽隨機(jī)數(shù)的類的類的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁版、PC客戶端和批量生成器
問友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
JAVA中隨機(jī)數(shù)是哪個(gè)類來完成的?謝謝
Math 類包含基本的數(shù)字操作,如指數(shù)、對(duì)數(shù)、平方根和三角函數(shù)。與 StrictMath 類的某些數(shù)值方法不同,并不是 Math 類的所有等效函數(shù)的實(shí)現(xiàn)都定義為返回逐位相同的結(jié)果。這一寬限允許在不要求嚴(yán)格可重復(fù)性的地方實(shí)現(xiàn)更好的性能。
默認(rèn)情況下,很多 Math 方法僅調(diào)用 StrictMath 中的等效方法來完成它們的實(shí)現(xiàn)。代碼生成器鼓勵(lì)使用特定于平臺(tái)的本機(jī)庫或者在可用的地方使用微處理器指令,來提供對(duì) Math 方法的更高性能的實(shí)現(xiàn)。這種更高性能的實(shí)現(xiàn)仍然必須遵守 Math 的規(guī)范。
實(shí)現(xiàn)規(guī)范的質(zhì)量涉及到兩種屬性,即返回結(jié)果的準(zhǔn)確性和方法的單調(diào)性。浮點(diǎn) Math 方法的準(zhǔn)確性根據(jù) ulp(units in the last place,最后一位的進(jìn)退位)來衡量。對(duì)于一個(gè)給定的浮點(diǎn)格式,特定實(shí)數(shù)值的 ulp 是將該數(shù)值括起來的兩個(gè)浮點(diǎn)值的差。討論方法的準(zhǔn)確性是從整體上考慮的,而不是針對(duì)具體的參數(shù),引用的 ulp 數(shù)是為了考慮參數(shù)的最差情況的誤差。如果一個(gè)方法的誤差總是小于 0.5 ulp,則該方法始終返回最接近準(zhǔn)確結(jié)果的浮點(diǎn)數(shù);這種方法就是正確舍入。一種正確舍入的方法通常能得到最佳的浮點(diǎn)近似值,然而,對(duì)于很多浮點(diǎn)方法來說,進(jìn)行正確的舍入有些不切實(shí)際。相反,對(duì)于 Math 類來說,有些方法允許誤差在 1 或 2 ulp 的范圍內(nèi)。在非正式情況下,對(duì)于 1 ulp 的誤差范圍,當(dāng)準(zhǔn)確結(jié)果是可表示的數(shù)值時(shí),應(yīng)該按照計(jì)算結(jié)果返回準(zhǔn)確結(jié)果;否則,返回將準(zhǔn)確結(jié)果括起來的兩個(gè)浮點(diǎn)值。對(duì)于值很大的準(zhǔn)確結(jié)果,括號(hào)的一端可以是無窮大。除了個(gè)別參數(shù)的準(zhǔn)確性之外,維護(hù)不同參數(shù)的方法之間的正確關(guān)系也很重要。因此,大多數(shù)誤差大于 0.5 ulp 的方法都要求是半單調(diào)的:只要數(shù)學(xué)函數(shù)是非遞減的,浮點(diǎn)近似值就是非遞減的;同樣地,只要數(shù)學(xué)函數(shù)是非遞增的,浮點(diǎn)近似值就是非遞增的。不是所有準(zhǔn)確性為 1 ulp 的近似值都能自動(dòng)滿足單調(diào)性要求。
public class Randomextends Objectimplements Serializable此類的實(shí)例用于生成偽隨機(jī)數(shù)流。此類使用 48 位的種子,使用線性同余公式對(duì)其進(jìn)行修改(請(qǐng)參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。
如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實(shí)現(xiàn),為類 Random 指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實(shí)現(xiàn)必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規(guī)協(xié)定即可。
Random 類所實(shí)現(xiàn)的算法使用一個(gè) protected 實(shí)用工具方法,每次調(diào)用它都可提供最多 32 個(gè)偽隨機(jī)生成的位。
很多應(yīng)用程序會(huì)發(fā)現(xiàn) Math 類中的 random 方法更易于使用。
請(qǐng)高人指教java中random函數(shù)的詳細(xì)知識(shí)!本人不勝感激!謝謝了!
java.util類 Random
java.lang.Object
java.util.Random
所有已實(shí)現(xiàn)的接口:
Serializable
直接已知子類:
SecureRandom
--------------------------------------------------------------------------------
public class Randomextends Objectimplements Serializable此類的實(shí)例用于生成偽隨機(jī)數(shù)流。此類使用 48 位的種子,使用線性同余公式對(duì)其進(jìn)行修改(請(qǐng)參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。
如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實(shí)現(xiàn),為類 Random 指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實(shí)現(xiàn)必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規(guī)協(xié)定即可。
Random 類所實(shí)現(xiàn)的算法使用一個(gè) protected 實(shí)用工具方法,每次調(diào)用它都可提供最多 32 個(gè)偽隨機(jī)生成的位。
很多應(yīng)用程序會(huì)發(fā)現(xiàn) Math 類中的 random 方法更易于使用。
從以下版本開始:
JDK1.0
另請(qǐng)參見:
Math.random(), 序列化表格
--------------------------------------------------------------------------------
構(gòu)造方法摘要
Random()
創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。
Random(long seed)
使用單個(gè) long 種子創(chuàng)建一個(gè)新隨機(jī)數(shù)生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機(jī)數(shù)生成器的狀態(tài)。
方法摘要
protected int next(int bits)
生成下一個(gè)偽隨機(jī)數(shù)。
boolean nextBoolean()
返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 boolean 值。
void nextBytes(byte[] bytes)
生成隨機(jī)字節(jié)并將其置于用戶提供的字節(jié)數(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ù)生成器的序列中取出的、呈高斯(“正常地”)分布的 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ù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。
long nextLong()
返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 long 值。
void setSeed(long seed)
使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
構(gòu)造方法詳細(xì)信息
Random
public Random()創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。此構(gòu)造方法為隨機(jī)數(shù)生成器的種子設(shè)置某個(gè)值,該值與此構(gòu)造方法的所有其他調(diào)用所用的值完全不同。
--------------------------------------------------------------------------------
Random
public Random(long seed)使用單個(gè) long 種子創(chuàng)建一個(gè)新隨機(jī)數(shù)生成器:
public Random(long seed) { setSeed(seed); }next 方法使用它來保存隨機(jī)數(shù)生成器的狀態(tài)。
參數(shù):
seed - 初始種子。
另請(qǐng)參見:
setSeed(long)
方法詳細(xì)信息
setSeed
public void setSeed(long seed)使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。setSeed 的常規(guī)協(xié)定是它更改此隨機(jī)數(shù)生成器對(duì)象的狀態(tài),使其狀態(tài)好像是剛剛使用參數(shù) seed 作為種子創(chuàng)建它的狀態(tài)一樣。Random 類按如下方式實(shí)現(xiàn) setSeed 方法:
synchronized public void setSeed(long seed) {
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
haveNextNextGaussian = false;
}由 Random 類實(shí)現(xiàn)的 setSeed 恰好只使用 48 位的給定種子。但是,通常重寫方法可能使用 long 參數(shù)的所有 64 位作為種子值。 注:盡管種子值是一個(gè)基本的 AtomicLong,但仍必須對(duì)此方法同步,確保 haveNextNextGaussian 的語義正確。
參數(shù):
seed - 初始種子。
--------------------------------------------------------------------------------
next
protected int next(int bits)生成下一個(gè)偽隨機(jī)數(shù)。當(dāng)此數(shù)被所有其他方法使用時(shí),子類應(yīng)該重寫此數(shù)。
next 的常規(guī)協(xié)定是它返回一個(gè) int 值,并且如果參數(shù)位處于 1 和 32(包括)之間,那么返回值的多數(shù)低位都將(大致)是單獨(dú)選擇的位值,每個(gè)位值是 0 或 1 的機(jī)會(huì)(大致)相等。Random 類按如下方式實(shí)現(xiàn) next 方法:
synchronized protected int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
}這是一個(gè)線性同余偽隨機(jī)數(shù)生成器,由 D. H. Lehmer 定義,Donald E. Knuth 在《The Art of Computer Programming, Volume 2: Seminumerical Algorithms》的第 3.2.1 節(jié)中進(jìn)行了描述。
參數(shù):
bits - 隨機(jī)位。
返回:
隨機(jī)數(shù)生成器序列的下一個(gè)偽隨機(jī)值。
從以下版本開始:
JDK1.1
--------------------------------------------------------------------------------
nextBytes
public void nextBytes(byte[] bytes)生成隨機(jī)字節(jié)并將其置于用戶提供的字節(jié)數(shù)組中。所生成的隨機(jī)字節(jié)數(shù)等于該字節(jié)數(shù)組的長度。
參數(shù):
bytes - 放入隨機(jī)字節(jié)的非 null 字節(jié)數(shù)組。
從以下版本開始:
JDK1.1
--------------------------------------------------------------------------------
nextInt
public int nextInt()返回下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值。nextInt 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回一個(gè) int 值。所有 232 個(gè)可能 int 值的生成概率(大致)相同。Random 類按如下方式實(shí)現(xiàn) nextInt 方法:
public int nextInt() { return next(32); }
返回:
下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值。
--------------------------------------------------------------------------------
nextInt
public int nextInt(int n)返回一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。nextInt 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回指定范圍中的一個(gè) int 值。所有 n 個(gè)可能 int 值的生成概率(大致)相同。Random 類按如下方式實(shí)現(xiàn) nextInt(int n) 方法:
public int nextInt(int n) {
if (n<=0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while(bits - val + (n-1) < 0);
return val;
}
前面的描述中使用了不明確的詞“大致”,只是因?yàn)?next 方法大致為一個(gè)單獨(dú)選擇位的公正來源。如果它是一個(gè)隨機(jī)選擇位的最佳來源,那么給出的算法應(yīng)該從起始范圍開始完全一致地選擇 int 值。
但此算法稍微有些復(fù)雜。它拒絕那些會(huì)導(dǎo)致不均勻分布的值(由于 2^31 無法被 n 整除)。某個(gè)值被拒絕的概率取決于 n。最壞的情況是 n=2^30+1,拒絕的概率是 1/2,循環(huán)終止前的預(yù)計(jì)迭代次數(shù)是 2。
此算法特別對(duì)待 n 是 2 次冪的情況:它從基礎(chǔ)的偽隨機(jī)數(shù)生成器中返回正確的高位數(shù)。在不是特殊處理的情況中,將返回正確的低 位數(shù)。眾所周知,線性同余偽隨機(jī)數(shù)生成器(比如此類所實(shí)現(xiàn)的)在其低位的值序列中有 short periods。因此,如果 n 是 2 次冪(冪值較?。?,則這種特殊情況會(huì)導(dǎo)致對(duì)此方法的后續(xù)調(diào)用會(huì)返回其長度大大增加的值序列。
參數(shù):
n - 所返回隨機(jī)數(shù)的范圍。必須為正數(shù)。
返回:
一個(gè)偽隨機(jī)數(shù),處于 0(包括)和 n(包括)之間均勻分布的 int 值。
拋出:
IllegalArgumentException - n 不是正數(shù)。
從以下版本開始:
1.2
--------------------------------------------------------------------------------
nextLong
public long nextLong()返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 long 值。nextLong 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回一個(gè) long 值。所有 264 個(gè)可能 long 值的生成概率(大致)相同。Random 類按如下方式實(shí)現(xiàn) nextLong 方法: public long nextLong() { return ((long)next(32) << 32) + next(32); }
返回:
下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 long 值。
--------------------------------------------------------------------------------
nextBoolean
public boolean nextBoolean()返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 boolean 值。nextBoolean 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回一個(gè) boolean 值。值 true 和 false 的生成概率(大致)相同。Random 類按如下方式實(shí)現(xiàn) nextBoolean 方法:
public boolean nextBoolean() {return next(1) != 0;}
返回:
下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 boolean 值。
從以下版本開始:
1.2
--------------------------------------------------------------------------------
nextFloat
public float nextFloat()返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。
nextFloat 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回一個(gè)從 0.0f(包括)到 1.0f(包括)范圍內(nèi)均勻選擇(大致)的 float 值。所有 224 個(gè)可能 float 值(其形式為 m x 2-24,其中 m 是一個(gè)小于 224 的正整數(shù))的生成概率(大致)相同。Random 類按如下方式實(shí)現(xiàn) nextFloat 方法:
public float nextFloat() {
return next(24) / ((float)(1 << 24));
}前面的描述中使用了不明確的詞“大致”,只是因?yàn)?next 方法大致為一個(gè)單獨(dú)選擇位的公正來源。如果它是一個(gè)隨機(jī)選擇位的最佳來源,那么給出的算法應(yīng)該從起始范圍開始完全一致地選擇 float 值。
[在 Java 的早期版本中,計(jì)算的結(jié)果是錯(cuò)誤的,因?yàn)椋?
return next(30) / ((float)(1 << 30));這可能看似等效(如果不是更好的話),但實(shí)際上由于浮點(diǎn)數(shù)舍入中的偏差,它會(huì)導(dǎo)致輕微的不均勻性:有效數(shù)的低位更可能是 0 而不是 1。]
返回:
下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。
--------------------------------------------------------------------------------
nextDouble
public double nextDouble()返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0之間均勻分布的 double 值。
nextDouble 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回一個(gè)從 0.0d(包括)到 1.0d(包括)范圍內(nèi)均勻選擇(大致)的 double 值。所有 253 個(gè)可能 float 值(其形式為 m x 2-53,其中 m 是一個(gè)小于 253 的正整數(shù))的生成概率(大致)相同。Random 類按如下方式實(shí)現(xiàn) nextDouble 方法:
public double nextDouble() {
return (((long)next(26) << 27) + next(27))
/ (double)(1L << 53);
}前面的描述中使用了不明確的詞“大致”,只是因?yàn)?next 方法大致為一個(gè)單獨(dú)選擇位的公正來源。如果它是一個(gè)隨機(jī)選擇位的最佳來源,那么給出的算法應(yīng)該從起始范圍開始完全一致地選擇 double 值。
[在 Java 的早期版本中,計(jì)算的結(jié)果是錯(cuò)誤的,因?yàn)椋?
return (((long)next(27) << 27) + next(27))
/ (double)(1L << 54);這可能看似等效(如果不是更好的話),但實(shí)際上由于浮點(diǎn)數(shù)舍入中的偏差,它會(huì)引入較大的不均勻性:有效數(shù)的低位可能出現(xiàn)的 0 是 1 的三倍!這種不均勻性在實(shí)踐中可能沒什么關(guān)系,但是我們應(yīng)該爭取完美。]
返回:
下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 double 值。
--------------------------------------------------------------------------------
nextGaussian
public double nextGaussian()返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標(biāo)準(zhǔn)偏差是 1.0。
nextGaussian 的常規(guī)協(xié)定是偽隨機(jī)地生成并返回一個(gè) double 值,該值從(大致)從具有平均值 0.0 和標(biāo)準(zhǔn)偏差 1.0 的常規(guī)標(biāo)準(zhǔn)分布中選擇。Random 類按如下方式實(shí)現(xiàn) nextGaussian 方法:
synchronized public double nextGaussian() {
if (haveNextNextGaussian) {
haveNextNextGaussian = false;
return nextNextGaussian;
} else {
double v1, v2, s;
do {
v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
s = v1 * v1 + v2 * v2;
} while (s >= 1 || s == 0);
double multiplier = Math.sqrt(-2 * Math.log(s)/s);
nextNextGaussian = v2 * multiplier;
haveNextNextGaussian = true;
return v1 * multiplier;
}
}這使用了 G. E. P. Box、M. E. Muller 和 G. Marsaglia 的 polar method,該方法在 Donald E. Knuth 的《The Art of Computer Programming, Volume 2:Seminumerical Algorithms》的第 3.4.1 節(jié),小節(jié) C,算法 P 中進(jìn)行了描述。注意,對(duì)于一次調(diào)用 Math.log 和一次調(diào)用 Math.sqrt 而言,它生成了兩個(gè)單獨(dú)的值。
返回:
下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標(biāo)準(zhǔn)偏差是 1.0。
這是我從API里直接拷過來的,你可以在網(wǎng)上下載java api,網(wǎng)上有很多資源,有中文版的
java random 和 random的區(qū)別
java.lang.Math random() 返回帶正號(hào)的 double 值,該值大于等于 0.0 且小于 1.0。返回值是一個(gè)偽隨機(jī)選擇的數(shù),在該范圍 內(nèi)(近似)均勻分布。 第一次調(diào)用該方法時(shí),它將創(chuàng)建一個(gè)新的偽隨機(jī)數(shù)生成器,與以下表達(dá)式完全相同 new java.util.Random 之后,新的偽隨機(jī)數(shù)生成器可用于此方法的所有調(diào)用,但不能用于其他地方。 此方法是完全同步的,可允許多個(gè)線程使用而不出現(xiàn)錯(cuò)誤。但是,如果許多線程需要以極高的速率生 成偽隨機(jī)數(shù),那么這可能會(huì)減少每個(gè)線程對(duì)擁有自己偽隨機(jī)數(shù)生成器的爭用。 返回: 大于等于 0.0 且小于 1.0 的偽隨機(jī) double 值。java.util.Random 此類的實(shí)例用于生成偽隨機(jī)數(shù)流。此類使用 48 位的種子,使用線性同余公式 (linear congruential form) 對(duì)其進(jìn)行了修改。 如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返 回相同的數(shù)字序列。為了保證此屬性的實(shí)現(xiàn),為類 Random 指定了特定的算法。為了 Java 代碼的完全可 移植性, Java 實(shí)現(xiàn)必須讓類 Random 使用此處所示的所有算法。 但是允許 Random 類的子類使用其他算法, 只要其符合所有方法的常規(guī)協(xié)定即可。 Random 類實(shí)現(xiàn)的算法使用一個(gè) protected 實(shí)用工具方法,每次調(diào)用它最多可提供 32 個(gè)偽隨機(jī)生成 的位。 很多應(yīng)用程序會(huì)發(fā)現(xiàn) Math.random()方法更易于使用。
import java.util.Random什么意思
就是工具類中的隨機(jī)類,此類的實(shí)例用于生成偽隨機(jī)數(shù)流。沒什么好解釋的,查一下文檔有詳解的。下面是它的一些方法,看看就會(huì)了。protected
int
next(int bits)
生成下一個(gè)偽隨機(jī)數(shù)。
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ù)生成器序列的、在 0(包括)和指定值(不包括)之間均勻分布的 int
值。
long
nextLong()
返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的 long 值。
void
setSeed(long seed)
使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。
偽隨機(jī)數(shù)的生成方法
一般地,偽隨機(jī)數(shù)的生成方法主要有以下3種:
(1) 直接法(Direct Method),根據(jù)分布函數(shù)的物理意義生成。缺點(diǎn)是僅適用于某些具有特殊分布的隨機(jī)數(shù),如二項(xiàng)式分布、泊松分布。
(2) 逆轉(zhuǎn)法(Inversion Method),假設(shè)U服從[0,1]區(qū)間上的均勻分布,令X=F-1(U),則X的累計(jì)分布函數(shù)(CDF)為F。該方法原理簡單、編程方便、適用性廣。
(3)接受拒絕法(Acceptance-Rejection Method):假設(shè)希望生成的隨機(jī)數(shù)的概率密度函數(shù)(PDF)為f,則首先找到一個(gè)PDF為g的隨機(jī)數(shù)發(fā)生器與常數(shù)c,使得f(x)≤cg(x),然后根據(jù)接收拒絕算法求解。由于算法平均運(yùn)算c次才能得到一個(gè)希望生成的隨機(jī)數(shù),因此c的取值必須盡可能小。顯然,該算法的缺點(diǎn)是較難確定g與c。
因此,偽隨機(jī)數(shù)生成器(PRNG)一般采用逆轉(zhuǎn)法,其基礎(chǔ)是均勻分布,均勻分布PRNG的優(yōu)劣決定了整個(gè)隨機(jī)數(shù)體系的優(yōu)劣[7]。下文研究均勻分布的PRNG。
以上就是關(guān)于生成偽隨機(jī)數(shù)的類的類相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
免費(fèi)廣告語設(shè)計(jì)生成器(免費(fèi)廣告語設(shè)計(jì)生成器在線)
免費(fèi)文章生成器有啊些(免費(fèi)的文章生成器手機(jī)版)
景觀設(shè)計(jì)停車位(景觀設(shè)計(jì)停車位圖片)