3

JAVA Random クラスとその使用法について知っています。しかし、範囲内のすべての数値が少なくとも1回生成されるまで繰り返されるべきではない乱数を生成したいと考えています。誰かが私にいくつかの参照を提供できますか..?

Random クラスを使用しているときに直面する問題は、一部の数値が 2 ~ 3 回繰り返され、一部の数値がまったく生成されないことです。生成された数値に基づいていくつかの要求を処理する別のスレッドがあるため、このシナリオではアプリケーションが失敗する可能性があります。 ....そして、遅延があり、次の一意の数字が利用できない瞬間、生成されていない数字を処理せずに停止します...

4

3 に答える 3

13

範囲内のすべての値を生成してシャッフルできます。Collections.shuffle() すべての値を使用したら、繰り返します。

カードのデッキがあると想像してみてください。すべてのカードが 1 枚ずつ入っているデッキを 1 つ取り、それをシャッフルすると、各カードがランダムな順序で 1 回だけ出現することがわかります。1 つの山札が終わったら、もう一度すべてのカードを取り、再シャッフルします (または新しい山札をシャッフルします)。

于 2013-01-13T11:13:24.513 に答える
3
  • 範囲内のすべての可能な乱数を含むリストを作成します。
  • 結果として乱数を使用する代わりに、ランダムな整数を使用してリスト内のインデックスを選択します
  • リストから削除して返却してください。

ランダムな整数の範囲を現在のリスト サイズに調整するように注意してください (新しい数値を取得するたびに 1 ずつ減少します)

于 2013-01-13T11:14:25.023 に答える
1

すでに選択されているすべての数字のリストを保持し、新しい乱数がそのリストにあるかどうかを確認できます。これ は、同じ質問をした人の例です

于 2013-01-13T11:14:31.573 に答える