日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java随机数种子_使用种子的Java随机数

發(fā)布時(shí)間:2024/8/1 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java随机数种子_使用种子的Java随机数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用種子的Java隨機(jī)數(shù)

這是我的代碼,使用種子作為參數(shù)來(lái)生成隨機(jī)數(shù):

double randomGenerator(long seed) {

Random generator = new Random(seed);

double num = generator.nextDouble() * (0.5);

return num;

}

每次我提供種子并嘗試生成100個(gè)數(shù)字時(shí),它們都是相同的。

我怎樣才能解決這個(gè)問(wèn)題?

7個(gè)解決方案

73 votes

如果您給相同的種子,那是正常的。 這是允許測(cè)試的重要功能。

選中此選項(xiàng)可了解偽隨機(jī)生成和種子:

偽隨機(jī)數(shù)發(fā)生器

偽隨機(jī)數(shù)生成器(PRNG),也稱為確定性 隨機(jī)位發(fā)生器DRBG,是一種用于產(chǎn)生序列的算法 近似于隨機(jī)數(shù)屬性的數(shù)。 的 序列不是真正隨機(jī)的,因?yàn)樗耆?相對(duì)較小的一組初始值,稱為PRNG的狀態(tài), 其中包括真正的隨機(jī)種子。

如果要具有不同的序列(通常在不調(diào)整或調(diào)試算法時(shí)使用),則應(yīng)調(diào)用零參數(shù)構(gòu)造函數(shù),該構(gòu)造函數(shù)使用nanoTime嘗試每次獲取不同的種子。 當(dāng)然,此Random實(shí)例應(yīng)保留在您的方法之外。

您的代碼可能應(yīng)該是這樣的:

private Random generator = new Random();

double randomGenerator() {

return generator.nextDouble()*0.5;

}

Denys Séguret answered 2020-07-12T12:24:02Z

21 votes

簡(jiǎn)單的方法是使用:

Random rand = new Random(System.currentTimeMillis());

這是生成Random數(shù)字的最佳方法。

Pollar answered 2020-07-12T12:24:27Z

11 votes

您不應(yīng)該在方法范圍內(nèi)創(chuàng)建新的Random。 使其成為班級(jí)成員:

public class Foo {

private Random random

public Foo() {

this(System.currentTimeMillis());

}

public Foo(long seed) {

this.random = new Random(seed);

}

public synchronized double getNext() {

return generator.nextDouble();

}

}

這僅僅是一個(gè)例子。 我認(rèn)為這樣包裝Random不會(huì)增加任何價(jià)值。 將其放在正在使用的類中。

duffymo answered 2020-07-12T12:24:51Z

6 votes

這就是偽RNG的原理。 這些數(shù)字并不是真正隨機(jī)的。 它們是使用確定性算法生成的,但是根據(jù)種子的不同,生成數(shù)字的順序也會(huì)有所不同。 由于您始終使用相同的種子,因此始終獲得相同的序列。

JB Nizet answered 2020-07-12T12:25:11Z

2 votes

問(wèn)題在于您再次為隨機(jī)生成器添加了種子。 每次播種時(shí),都會(huì)重置隨機(jī)數(shù)生成器的初始狀態(tài),并且生成的第一個(gè)隨機(jī)數(shù)將是初始狀態(tài)之后的第一個(gè)隨機(jī)數(shù)

Minion91 answered 2020-07-12T12:25:31Z

2 votes

如果要使用一個(gè)種子生成多個(gè)數(shù)字,可以執(zhí)行以下操作:

public double[] GenerateNumbers(long seed, int amount) {

double[] randomList = new double[amount];

for (int i=0;i

Random generator = new Random(seed);

randomList[i] = Math.abs((double) (generator.nextLong() % 0.001) * 10000);

seed--;

}

return randomList;

}

如果使用相同的種子,它將顯示相同的列表。

user5479540 answered 2020-07-12T12:25:56Z

1 votes

這里的幾個(gè)示例創(chuàng)建了一個(gè)新的ThreadLocalRandom實(shí)例,但這不是必需的。 也沒有理由像一種解決方案一樣使用synchronized。 相反,請(qǐng)利用ThreadLocalRandom類上的方法:

double randomGenerator() {

return ThreadLocalRandom.current().nextDouble(0.5);

}

Finn answered 2020-07-12T12:26:18Z

總結(jié)

以上是生活随笔為你收集整理的java随机数种子_使用种子的Java随机数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。