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's and C++ random numbers are both pseudorandom. Of course the algorithms are different, so the results are different too.

If you would like a random number generator that is strong enough to use for cryptography, you can use SecureRandom: its interface is less intuitive, and it consumes more CPU, but the quality of its output is much higher than of a regular PRNG of Java,

于 2012-05-26T13:53:31.773 回答
0

如果你想生成一个随机数,最简单的方法是使用 new Random().nextInt(),也许将它包装在 Math.abs() 中以避免负数。如果你需要一个唯一的数字,你可以使用 UUID.randomUUID()。

于 2012-05-26T14:37:01.070 回答