4

Java を使用して、現在の時刻に基づいて一意の乱数を生成する方法を探しています。私は c++ プログラマーであり、c++ では通常、ランダムに時間をシードするので、特定の瞬間ごとに一意の乱数を取得でき、次のように機能します。

sRand((time)Null);
x=Rand();

Java では、次のように乱数をシードすることで同じ方法を使用できることがわかりました。

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

これは、Javaで乱数を生成するためにインターネットで見つけたすべての方法を使用した問題ですが、それらのどれも真にランダムではなく、負の数から正の数までの範囲でした。例えば:

Random rand = new Random(System.currentTimeMillis());
int x=rand.nextInt(); // or long or float ...

私が得たのは、真に乱数ではない一連の結果であり、結果は C++ とはまったく異なります。

Javaでこれを行うための最良の方法は何か、TAC番号の生成に似ているか、それに非常に近いものがあるか知りたいだけです。

4

2 に答える 2

8

Java と C++ の乱数はどちらも疑似乱数です。もちろん、アルゴリズムが異なるため、結果も異なります。

暗号化に使用するのに十分強力な乱数ジェネレーターが必要な場合は、次を使用できますSecureRandom。そのインターフェイスは直感的ではなく、より多くの CPU を消費しますが、出力の品質は Java の通常の PRNG よりもはるかに高くなります。

于 2012-05-26T13:53:31.773 に答える
0

乱数を生成する場合、最も簡単な方法は、新しいRandom()。nextInt()を使用することです。おそらく、負の値を避けるために、それをMath.abs()でラップします。必要なのが一意の番号である場合は、UUID.randomUUID()を使用できます。

于 2012-05-26T14:37:01.070 に答える