0

Java の場合:

私は何をするかを知ってRandom.setSeed(long seed);います。種子とは何か、使用するたびにどのように変化するかを知っています。シードを手動で変更して、シーケンスがしばらく繰り返されないようにする必要がありますか? または、変数 (システムクロックなど) を使用してシードを自動的に操作しますか?

シードを指定しない限り、同じプログラムを再度実行しても同じ結果は得られないため、コンストラクターでシードを操作する必要がありますが、定期的にシードを変更しますか (使用ごとにシードを変更することについては話していません)?

説明:

シードは使用ごとに変化しますが、ある時点でシードはランダムが構築されたときの数になります。

電話する必要がありますかRandom.setSeed(System.currentTimeInMillis())?時々、使用後にシーケンスが繰り返されないようにするために?

4

3 に答える 3

4

それはあなたが望むものに依存します。「ランダム」で繰り返し可能にしたい場合は、シードを固定しました。そうでなければ、シードを修正または変更する理由はほとんどありません。シードの正当な理由は次のとおりです。

  • テスト。したがって、ランダムの特定のパターンは毎回同じになります。
  • 評価。したがって、さまざまなテスト ケースが同じ一連の値を取得するため、かなり比較することができます。

本当にシードを変更したい場合、または独立したシードを持つ複数のランダム ジェネレーターが必要な場合は、新しい Random オブジェクトを作成します。

于 2014-11-09T11:07:52.437 に答える
1

Randomオブジェクトを「ランダム」に保つためだけに、作成後にオブジェクトのシードを更新し続ける必要はありません。

于 2014-11-09T11:12:42.273 に答える
0

パラメーターなしのコンストラクターは既にそれを処理しています:

/**
 * Creates a new random number generator. This constructor sets
 * the seed of the random number generator to a value very likely
 * to be distinct from any other invocation of this constructor.
 */
public Random();

シードの設定 (またはコンストラクターへのシードの提供) は、コードの連続実行で同じ一連の疑似乱数を生成する場合に役立ちます (これはデバッグ目的に役立ちます)。

于 2014-11-09T11:05:16.440 に答える