Javaプログラムを20回テストする必要があり、テストを繰り返すことができるようにランダムシードを設定する必要があります。最初のシードを0に設定し、実行ごとに1ずつインクリメントする場合(つまり、1、2、3など)、シードがそれほど離れていなくても、この方法で完全なランダム性が保証されますか?
ありがとうございました
どのシードも、Java に含まれているような標準PRNGの他のシードと同じレベルのランダム性を提供します。そのため、テストにインクリメント シードを使用しても問題ありません。
ただし、より優れた乱数ジェネレーターの使用を検討することをお勧めします。Java に含まれているものは、値を画像としてレンダリングすると、顕著な繰り返しパターンが生成されます (参考文献をすぐに見つけることはできませんが、明らかであることを思い出します)。Mersenne Twister (Javaバージョンがあります) を代替手段としてお勧めします。これは高速で、非常に長い周期を持つため、パターンを簡単に確認することはできません。
0 のシードを使用すると、乱数のシーケンスはその時点から反復可能になります。別のシーケンスが必要な場合にのみ、別のランダム シードを使用する必要があります。つまり、テストごとに 1 回シードを設定できるはずです。
現在の時刻をシードとして使用しないのはなぜですか? つまり、System.currentTimeMillis()
?
数値または文字列が必要ですか? UUID.randomUUID().toString()
文字列が必要な場合はテスト用に UUID を取得していましたが、数値が必要な場合は System.nanoTime()
.