W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
java.lang.Object
|---java.util.Random
public class Random
extends Object
implements Serializable
此類(lèi)的一個(gè)實(shí)例用于生成偽隨機(jī)數(shù)流。 該類(lèi)使用 48 位種子,該種子使用線(xiàn)性同余公式進(jìn)行修改。
如果使用相同的種子創(chuàng)建 Random 的兩個(gè)實(shí)例,并且為每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。 為了保證這一特性,為類(lèi) Random 指定了特定的算法。 為了 Java 代碼的絕對(duì)可移植性,Java 實(shí)現(xiàn)必須使用此處為類(lèi) Random 顯示的所有算法。 但是,允許類(lèi) Random 的子類(lèi)使用其他算法,只要它們遵守所有方法的通用合同。
類(lèi) Random 實(shí)現(xiàn)的算法使用受保護(hù)的實(shí)用程序方法,該方法在每次調(diào)用時(shí)可以提供多達(dá) 32 個(gè)偽隨機(jī)生成的位。
許多應(yīng)用程序會(huì)發(fā)現(xiàn) Math#random 方法更易于使用。
java.util.Random 的實(shí)例是線(xiàn)程安全的。 但是,跨線(xiàn)程并發(fā)使用同一個(gè) java.util.Random 實(shí)例可能會(huì)遇到爭(zhēng)用,從而導(dǎo)致性能下降。 考慮改為在多線(xiàn)程設(shè)計(jì)中使用 ThreadLocalRandom。
java.util.Random 的實(shí)例在密碼學(xué)上不是安全的。 考慮改為使用 SecureRandom 來(lái)獲取加密安全的偽隨機(jī)數(shù)生成器,以供安全敏感的應(yīng)用程序使用。
構(gòu)造函數(shù) | 描述 |
---|---|
Random() | 創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。 |
Random(long seed) | 使用單個(gè)長(zhǎng)種子創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。 |
修飾符和類(lèi)型 | 方法 | 描述 |
---|---|---|
DoubleStream | doubles() | 返回一個(gè)有效無(wú)限的偽隨機(jī)雙精度值流,每個(gè)值介于零(包括)和一(不包括)之間。 |
DoubleStream | doubles(double randomNumberOrigin, double randomNumberBound) | 返回一個(gè)有效無(wú)限的偽隨機(jī)雙精度值流,每個(gè)都符合給定的原點(diǎn)(包括)和綁定(不包括)。 |
DoubleStream | doubles(long streamSize) | 返回一個(gè)流,該流產(chǎn)生給定的 streamSize 數(shù)量的偽隨機(jī)雙精度值,每個(gè)值介于零(包括)和一(不包括)之間。 |
DoubleStream | doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) | 返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī)雙精度值的流,每個(gè)都符合給定的原點(diǎn)(包括)和綁定(不包括)。 |
IntStream | ints() | 返回一個(gè)有效無(wú)限的偽隨機(jī) int 值流。 |
IntStream | ints(int randomNumberOrigin, int randomNumberBound) | 返回一個(gè)有效無(wú)限的偽隨機(jī) int 值流,每個(gè)值都符合給定的原點(diǎn)(包括)和綁定(不包括)。 |
IntStream | ints(long streamSize) | 返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī) int 值的流。 |
IntStream | ints(long streamSize, int randomNumberOrigin, int randomNumberBound) | 返回一個(gè)流,該流產(chǎn)生給定的 streamSize 數(shù)量的偽隨機(jī) int 值,每個(gè)都符合給定的原點(diǎn)(包括)和邊界(不包括)。 |
LongStream | longs() | 返回一個(gè)有效無(wú)限的偽隨機(jī)長(zhǎng)值流。 |
LongStream | longs(long streamSize) | 返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī) long 值的流。 |
LongStream | longs(long randomNumberOrigin, long randomNumberBound) | 返回一個(gè)有效無(wú)限的偽隨機(jī)長(zhǎng)值流,每個(gè)值都符合給定的原點(diǎn)(包括)和綁定(不包括)。 |
LongStream | longs(long streamSize, long randomNumberOrigin, long randomNumberBound) | 返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī) long 的流,每個(gè)都符合給定的原點(diǎn)(包括)和綁定(不包括)。 |
protected int | next(int bits) | 生成下一個(gè)偽隨機(jī)數(shù)。 |
boolean | nextBoolean() | 從該隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的布爾值。 |
void | nextBytes(byte[] bytes) | 生成隨機(jī)字節(jié)并將它們放入用戶(hù)提供的字節(jié)數(shù)組中。 |
double | nextDouble() | 從該隨機(jī)數(shù)生成器的序列中返回 0.0 到 1.0 之間的下一個(gè)偽隨機(jī)、均勻分布的雙精度值。 |
float | nextFloat() | 從該隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的浮點(diǎn)值,介于 0.0 和 1.0 之間。 |
double | nextGaussian() | 從該隨機(jī)數(shù)生成器的序列返回下一個(gè)偽隨機(jī)、高斯(“正?!保┓植茧p精度值,均值為 0.0,標(biāo)準(zhǔn)差為 1.0。 |
int | nextInt() | 從該隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的 int 值。 |
int | nextInt(int bound) | 返回一個(gè)偽隨機(jī)、均勻分布的 int 值,介于 0(包括)和指定值(不包括)之間,取自該隨機(jī)數(shù)生成器的序列。 |
long | nextLong() | 從這個(gè)隨機(jī)數(shù)生成器序列返回下一個(gè)偽隨機(jī)、均勻分布的長(zhǎng)值。 |
void | setSeed(long seed) | 使用單個(gè)長(zhǎng)種子設(shè)置此隨機(jī)數(shù)生成器的種子。 |
從類(lèi) java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
public Random()
創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。 此構(gòu)造函數(shù)將隨機(jī)數(shù)生成器的種子設(shè)置為一個(gè)很可能與此構(gòu)造函數(shù)的任何其他調(diào)用不同的值。
public Random(long seed)
使用單個(gè)長(zhǎng)種子創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。 種子是偽隨機(jī)數(shù)生成器內(nèi)部狀態(tài)的初始值,由方法 next(int) 維護(hù)。
調(diào)用 new Random(seed) 等效于:
Random rnd = new Random();
rnd.setSeed(seed);
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
seed | 初始種子 |
public void setSeed(long seed)
使用單個(gè)長(zhǎng)種子設(shè)置此隨機(jī)數(shù)生成器的種子。 setSeed 的一般約定是,它會(huì)更改此隨機(jī)數(shù)生成器對(duì)象的狀態(tài),使其處于與剛剛使用參數(shù)種子作為種子創(chuàng)建時(shí)完全相同的狀態(tài)。 方法 setSeed 由 Random 類(lèi)通過(guò)原子更新種子來(lái)實(shí)現(xiàn)
(seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
并清除 nextGaussian() 使用的 haveNextNextGaussian 標(biāo)志。
由 Random 類(lèi)實(shí)現(xiàn)的 setSeed 恰好只使用給定種子的 48 位。 然而,一般來(lái)說(shuō),覆蓋方法可以使用長(zhǎng)參數(shù)的所有 64 位作為種子值。
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
seed | 初始種子 |
protected int next(int bits)
生成下一個(gè)偽隨機(jī)數(shù)。 子類(lèi)應(yīng)該覆蓋它,因?yàn)樗凰衅渌椒ㄊ褂谩?/p>
next 的一般約定是它返回一個(gè) int 值,如果參數(shù)位在 1 到 32(含)之間,那么返回值的許多低位將(大約)獨(dú)立選擇的位值,其中每個(gè) 是(大約)同樣可能是 0 或 1。方法 next 由 Random 類(lèi)通過(guò)原子更新種子來(lái)實(shí)現(xiàn)
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
并返回
(int)(seed >>> (48 - bits)).
這是一個(gè)線(xiàn)性同余偽隨機(jī)數(shù)生成器,由 D. H. Lehmer 定義并由 Donald E. Knuth 在計(jì)算機(jī)編程藝術(shù),第 3 卷:半數(shù)值算法,第 3.2.1 節(jié)中描述。
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
bits | 隨機(jī)位 |
返回:
此隨機(jī)數(shù)生成器序列中的下一個(gè)偽隨機(jī)值
public void nextBytes(byte[] bytes)
生成隨機(jī)字節(jié)并將它們放入用戶(hù)提供的字節(jié)數(shù)組中。 產(chǎn)生的隨機(jī)字節(jié)數(shù)等于字節(jié)數(shù)組的長(zhǎng)度。
nextBytes 方法由 Random 類(lèi)實(shí)現(xiàn),就像這樣:
public void nextBytes(byte[] bytes) {
for (int i = 0; i < bytes.length; )
for (int rnd = nextInt(), n = Math.min(bytes.length - i, 4);
n-- > 0; rnd >>= 8)
bytes[i++] = (byte)rnd;
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
bytes | 要填充隨機(jī)字節(jié)的字節(jié)數(shù)組 |
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
NullPointerException | 如果字節(jié)數(shù)組為空 |
public int nextInt()
從該隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的 int 值。 nextInt 的一般約定是偽隨機(jī)生成并返回一個(gè) int 值。 所有 232 個(gè)可能的 int 值都是以(大約)相等的概率產(chǎn)生的。
nextInt 方法由 Random 類(lèi)實(shí)現(xiàn),就像通過(guò):
public int nextInt() {
return next(32);
}
返回:
此隨機(jī)數(shù)生成器序列中的下一個(gè)偽隨機(jī)、均勻分布的 int 值
public int nextInt(int bound)
返回一個(gè)偽隨機(jī)、均勻分布的 int 值,介于 0(包括)和指定值(不包括)之間,取自該隨機(jī)數(shù)生成器的序列。 nextInt 的一般約定是偽隨機(jī)生成并返回指定范圍內(nèi)的一個(gè) int 值。 所有綁定的可能 int 值都以(大約)相等的概率產(chǎn)生。 nextInt(int bound) 方法由 Random 類(lèi)實(shí)現(xiàn),就像通過(guò):
public int nextInt(int bound) {
if (bound <= 0)
throw new IllegalArgumentException("bound must be positive");
if ((bound & -bound) == bound) // i.e., bound is a power of 2
return (int)((bound * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % bound;
} while (bits - val + (bound-1) < 0);
return val;
}
在前面的描述中使用對(duì)沖“大約”只是因?yàn)橄乱粋€(gè)方法只是大約獨(dú)立選擇位的無(wú)偏源。 如果它是隨機(jī)選擇的位的完美來(lái)源,那么所示的算法將從規(guī)定的范圍內(nèi)以完美的一致性選擇 int 值。
該算法有點(diǎn)棘手。 它拒絕會(huì)導(dǎo)致分布不均勻的值(因?yàn)?2^31 不能被 n 整除)。 一個(gè)值被拒絕的概率取決于 n。 最壞的情況是 n=2^30+1,拒絕的概率是 1/2,循環(huán)終止前的預(yù)期迭代次數(shù)是 2。
該算法特別處理 n 是 2 的冪的情況:它從底層偽隨機(jī)數(shù)生成器返回正確數(shù)量的高位。 在沒(méi)有特殊處理的情況下,將返回正確數(shù)量的低位。 已知線(xiàn)性同余偽隨機(jī)數(shù)生成器(例如由此類(lèi)實(shí)現(xiàn)的那個(gè))在其低位的值序列中具有短周期。 因此,如果 n 是 2 的小冪,這種特殊情況會(huì)大大增加連續(xù)調(diào)用此方法返回的值序列的長(zhǎng)度。
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
bound | 上限(不包括)。 必須是積極的。 |
返回:
此隨機(jī)數(shù)生成器序列的下一個(gè)偽隨機(jī)、均勻分布的 int 值,介于零(包括)和邊界(不包括)之間
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 bound 不是正數(shù) |
public long nextLong()
從這個(gè)隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的 long 值。 nextLong 的一般合約是偽隨機(jī)生成并返回一個(gè) long 值。
nextLong 方法由 Random 類(lèi)實(shí)現(xiàn),就像通過(guò):
public long nextLong() {
return ((long)next(32) << 32) + next(32);
}
因?yàn)?Random 類(lèi)使用只有 48 位的種子,所以該算法不會(huì)返回所有可能的 long 值。
返回:
此隨機(jī)數(shù)生成器序列中的下一個(gè)偽隨機(jī)、均勻分布的長(zhǎng)值
public boolean nextBoolean()
從該隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的布爾值。 nextBoolean 的一般約定是偽隨機(jī)生成并返回一個(gè)布爾值。 值 true 和 false 以(大約)相等的概率產(chǎn)生。
nextBoolean 方法由 Random 類(lèi)實(shí)現(xiàn),就像通過(guò):
public boolean nextBoolean() {
return next(1) != 0;
}
返回:
此隨機(jī)數(shù)生成器序列中的下一個(gè)偽隨機(jī)、均勻分布的布爾值
public float nextFloat()
從該隨機(jī)數(shù)生成器的序列中返回下一個(gè)偽隨機(jī)、均勻分布的浮點(diǎn)值,介于 0.0 和 1.0 之間。
nextFloat 的一般約定是從 0.0f(包括)到 1.0f(不包括)范圍內(nèi)(大約)均勻選擇的一個(gè)浮點(diǎn)值是偽隨機(jī)生成并返回的。 m x 2-24 形式的所有 224 個(gè)可能的浮點(diǎn)值(其中 m 是小于 224 的正整數(shù))以(大約)相等的概率產(chǎn)生。
nextFloat 方法由 Random 類(lèi)實(shí)現(xiàn),就像通過(guò):
public float nextFloat() {
return next(24) / ((float)(1 << 24));
}
在前面的描述中使用對(duì)沖“大約”只是因?yàn)橄乱粋€(gè)方法只是大約獨(dú)立選擇位的無(wú)偏源。 如果它是隨機(jī)選擇的位的完美來(lái)源,那么所示的算法將從規(guī)定的范圍內(nèi)選擇具有完美一致性的浮點(diǎn)值。
[在 Java 的早期版本中,結(jié)果被錯(cuò)誤地計(jì)算為:
return next(30) / ((float)(1 << 30));
這似乎是等效的,如果不是更好的話(huà),但實(shí)際上由于浮點(diǎn)數(shù)舍入的偏差,它引入了輕微的不均勻性:有效數(shù)字的低位為 0 的可能性略高于 它將是 1。]
返回:
此隨機(jī)數(shù)生成器序列中的下一個(gè)偽隨機(jī)、均勻分布的浮點(diǎn)值,介于 0.0 和 1.0 之間
public double nextDouble()
從該隨機(jī)數(shù)生成器的序列中返回 0.0 到 1.0 之間的下一個(gè)偽隨機(jī)、均勻分布的雙精度值。
nextDouble 的一般約定是從 0.0d(包括)到 1.0d(不包括)范圍內(nèi)(大約)均勻選擇的一個(gè) double 值是偽隨機(jī)生成并返回的。
nextDouble 方法由 Random 類(lèi)實(shí)現(xiàn),就像這樣:
public double nextDouble() {
return (((long)next(26) << 27) + next(27))
/ (double)(1L << 53);
}
在前面的描述中使用對(duì)沖“大約”只是因?yàn)橄乱粋€(gè)方法只是大約獨(dú)立選擇位的無(wú)偏源。 如果它是隨機(jī)選擇的位的完美來(lái)源,那么所示的算法將從規(guī)定的范圍中選擇具有完美一致性的雙精度值。
[在 Java 的早期版本中,結(jié)果被錯(cuò)誤地計(jì)算為:
return (((long)next(27) << 27) + next(27))
/ (double)(1L << 54);
這似乎是等效的,如果不是更好的話(huà),但實(shí)際上由于浮點(diǎn)數(shù)舍入的偏差,它引入了很大的不均勻性:有效數(shù)字的低位為 0 的可能性是其三倍 比那將是1! 這種不均勻性在實(shí)踐中可能并不重要,但我們力求完美。]
返回:
此隨機(jī)數(shù)生成器序列中的下一個(gè)偽隨機(jī)、均勻分布的雙精度值,介于 0.0 和 1.0 之間
public double nextGaussian()
從該隨機(jī)數(shù)生成器的序列返回下一個(gè)偽隨機(jī)、高斯(“正常”)分布雙精度值,均值為 0.0,標(biāo)準(zhǔn)差為 1.0。
nextGaussian 的一般約定是從(大約)平均值為 0.0 和標(biāo)準(zhǔn)差為 1.0 的通常正態(tài)分布中選擇的一個(gè) double 值是偽隨機(jī)生成并返回的。
nextGaussian 方法由 Random 類(lèi)實(shí)現(xiàn),就好像由以下線(xiàn)程安全版本實(shí)現(xiàn):
private double nextNextGaussian;
private boolean haveNextNextGaussian = false;
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 = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
nextNextGaussian = v2 * multiplier;
haveNextNextGaussian = true;
return v1 * multiplier;
}
}
這使用 G. E. P. Box、M. E. Muller 和 G. Marsaglia 的極坐標(biāo)方法,如 Donald E. Knuth 在計(jì)算機(jī)編程藝術(shù)第 3 卷:半數(shù)值算法,第 3.4.1 節(jié),C 小節(jié),算法 P 中所述。請(qǐng)注意, 它僅以一次調(diào)用 StrictMath.log 和一次調(diào)用 StrictMath.sqrt 為代價(jià)生成兩個(gè)獨(dú)立的值。
返回:
下一個(gè)偽隨機(jī),高斯(“正?!保┓植嫉碾p精度值,均值為 0.0,標(biāo)準(zhǔn)差為 1.0,來(lái)自該隨機(jī)數(shù)生成器的序列
public IntStream ints(long streamSize)
返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī) int 值的流。
生成一個(gè)偽隨機(jī) int 值,就好像它是調(diào)用方法 nextInt() 的結(jié)果一樣。
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
streamSize | 要生成的值的數(shù)量 |
返回:
偽隨機(jī) int 值流
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
public IntStream ints()
返回一個(gè)有效無(wú)限的偽隨機(jī) int 值流。
生成一個(gè)偽隨機(jī) int 值,就好像它是調(diào)用方法 nextInt() 的結(jié)果一樣。
返回:
偽隨機(jī) int 值流
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
返回一個(gè)流,該流產(chǎn)生給定的 streamSize 數(shù)量的偽隨機(jī) int 值,每個(gè)都符合給定的原點(diǎn)(包括)和邊界(不包括)。
生成一個(gè)偽隨機(jī) int 值,就好像它是使用原點(diǎn)和綁定調(diào)用以下方法的結(jié)果:
int nextInt(int origin, int bound) {
int n = bound - origin;
if (n > 0) {
return nextInt(n) + origin;
}
else { // range not representable as int
int r;
do {
r = nextInt();
} while (r < origin || r >= bound);
return r;
}
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
streamSize | 要生成的值的數(shù)量 |
randomNumberOrigin | 每個(gè)隨機(jī)值的原點(diǎn)(包括) |
randomNumberBound | 每個(gè)隨機(jī)值的界限(不包括) |
返回:
一個(gè)偽隨機(jī) int 值流,每個(gè)值都具有給定的原點(diǎn)(包括)和邊界(不包括)
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零,或者 randomNumberOrigin 大于或等于 randomNumberBound |
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
返回一個(gè)有效無(wú)限的偽隨機(jī) int 值流,每個(gè)值都符合給定的原點(diǎn)(包括)和綁定(不包括)。
生成一個(gè)偽隨機(jī) int 值,就好像它是使用原點(diǎn)和綁定調(diào)用以下方法的結(jié)果:
int nextInt(int origin, int bound) {
int n = bound - origin;
if (n > 0) {
return nextInt(n) + origin;
}
else { // range not representable as int
int r;
do {
r = nextInt();
} while (r < origin || r >= bound);
return r;
}
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
randomNumberOrigin | 每個(gè)隨機(jī)值的原點(diǎn)(包括) |
randomNumberBound | 每個(gè)隨機(jī)值的界限(不包括) |
返回:
一個(gè)偽隨機(jī) int 值流,每個(gè)值都具有給定的原點(diǎn)(包括)和邊界(不包括)
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
public LongStream longs(long streamSize)
返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī) long 值的流。
生成一個(gè)偽隨機(jī)長(zhǎng)值,就好像它是調(diào)用方法 nextLong() 的結(jié)果。
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
streamSize | 要生成的值的數(shù)量 |
返回:
偽隨機(jī) long 值流
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
public LongStream longs()
返回一個(gè)有效無(wú)限的偽隨機(jī)長(zhǎng)值流。
生成一個(gè)偽隨機(jī)長(zhǎng)值,就好像它是調(diào)用方法 nextLong() 的結(jié)果。
返回:
偽隨機(jī) long 值流
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī) long 的流,每個(gè)都符合給定的原點(diǎn)(包括)和綁定(不包括)。
生成一個(gè)偽隨機(jī)長(zhǎng)值,就好像它是使用源和綁定調(diào)用以下方法的結(jié)果:
long nextLong(long origin, long bound) {
long r = nextLong();
long n = bound - origin, m = n - 1;
if ((n & m) == 0L) // power of two
r = (r & m) + origin;
else if (n > 0L) { // reject over-represented candidates
for (long u = r >>> 1; // ensure nonnegative
u + m - (r = u % n) < 0L; // rejection check
u = nextLong() >>> 1) // retry
;
r += origin;
}
else { // range not representable as long
while (r < origin || r >= bound)
r = nextLong();
}
return r;
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
streamSize | 要生成的值的數(shù)量 |
randomNumberOrigin | 每個(gè)隨機(jī)值的原點(diǎn)(包括) |
randomNumberBound | 每個(gè)隨機(jī)值的界限(不包括) |
返回:
一個(gè)偽隨機(jī) long 值流,每個(gè)值都具有給定的原點(diǎn)(包括)和邊界(不包括)
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零,或者 randomNumberOrigin 大于或等于 randomNumberBound |
public LongStream longs(long randomNumberOrigin, long randomNumberBound)
返回一個(gè)有效無(wú)限的偽隨機(jī)長(zhǎng)值流,每個(gè)值都符合給定的原點(diǎn)(包括)和綁定(不包括)。
生成一個(gè)偽隨機(jī)長(zhǎng)值,就好像它是使用源和綁定調(diào)用以下方法的結(jié)果:
long nextLong(long origin, long bound) {
long r = nextLong();
long n = bound - origin, m = n - 1;
if ((n & m) == 0L) // power of two
r = (r & m) + origin;
else if (n > 0L) { // reject over-represented candidates
for (long u = r >>> 1; // ensure nonnegative
u + m - (r = u % n) < 0L; // rejection check
u = nextLong() >>> 1) // retry
;
r += origin;
}
else { // range not representable as long
while (r < origin || r >= bound)
r = nextLong();
}
return r;
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
randomNumberOrigin | 每個(gè)隨機(jī)值的原點(diǎn)(包括) |
randomNumberBound | 每個(gè)隨機(jī)值的界限(不包括) |
返回:
一個(gè)偽隨機(jī) long 值流,每個(gè)值都具有給定的原點(diǎn)(包括)和邊界(不包括)
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
public DoubleStream doubles(long streamSize)
返回一個(gè)流,該流產(chǎn)生給定的 streamSize 數(shù)量的偽隨機(jī)雙精度值,每個(gè)值介于零(包括)和一(不包括)之間。
生成一個(gè)偽隨機(jī)雙精度值,就好像它是調(diào)用方法 nextDouble() 的結(jié)果。
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
streamSize | 要生成的值的數(shù)量 |
返回:
double 值流
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
public DoubleStream doubles()
返回一個(gè)有效無(wú)限的偽隨機(jī)雙精度值流,每個(gè)值介于零(包括)和一(不包括)之間。
生成一個(gè)偽隨機(jī)雙精度值,就好像它是調(diào)用方法 nextDouble() 的結(jié)果。
返回:
偽隨機(jī) double 值流
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
返回產(chǎn)生給定 streamSize 數(shù)量的偽隨機(jī)雙精度值的流,每個(gè)都符合給定的原點(diǎn)(包括)和邊界(不包括)。
生成一個(gè)偽隨機(jī)雙精度值,就好像它是使用原點(diǎn)和綁定調(diào)用以下方法的結(jié)果:
double nextDouble(double origin, double bound) {
double r = nextDouble();
r = r * (bound - origin) + origin;
if (r >= bound) // correct for rounding
r = Math.nextDown(bound);
return r;
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
streamSize | 要生成的值的數(shù)量 |
randomNumberOrigin | 每個(gè)隨機(jī)值的原點(diǎn)(包括) |
randomNumberBound | 每個(gè)隨機(jī)值的界限(不包括) |
返回:
一個(gè)偽隨機(jī) double 值流,每個(gè)都有給定的原點(diǎn)(包括)和邊界(不包括)
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
返回一個(gè)有效無(wú)限的偽隨機(jī)雙精度值流,每個(gè)都符合給定的原點(diǎn)(包括)和綁定(不包括)。
生成一個(gè)偽隨機(jī)雙精度值,就好像它是使用原點(diǎn)和綁定調(diào)用以下方法的結(jié)果:
double nextDouble(double origin, double bound) {
double r = nextDouble();
r = r * (bound - origin) + origin;
if (r >= bound) // correct for rounding
r = Math.nextDown(bound);
return r;
}
參數(shù):
參數(shù)名稱(chēng) | 參數(shù)描述 |
---|---|
randomNumberOrigin | 每個(gè)隨機(jī)值的原點(diǎn)(包括) |
randomNumberBound | 每個(gè)隨機(jī)值的界限(不包括) |
返回:
一個(gè)偽隨機(jī) double 值流,每個(gè)都有給定的原點(diǎn)(包括)和邊界(不包括)
Throws:
Throw名稱(chēng) | Throw描述 |
---|---|
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: