生成范围内的随机数。没有溢出。在Java中

时间:2014-04-05 17:14:23

标签: java random

请不要将此视为以下副本: How to generate random positive and negative numbers in java

我需要使用带有种子的随机数生成器。所以,我使用java.util.Random类和constructor来获取种子。

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

然后我使用了上面线程中给出的解决方案

int randomValue = random.nextInt(max - min + 1) + min;

然而,上述解决方案的问题是,如果min是一个较大的负数而max是一个较大的正数,那么则(max-min + 1)会导致溢出。

应该有一个更好的解决方案。任何人都可以指点我。

谢谢!

1 个答案:

答案 0 :(得分:0)

如何使用BigInteger来避免int溢出。你也可以用

new BigInteger(int numBits, Random rnd)

使用随机位创建一些BigInteger(最多为numBits指定的位)。

所以只计算你需要多少位(range.bitLength()可能有用)检查随机值是否在指定范围内,所以如果value再次大于范围random,如果一切正常,则返回随机值增加{ {1}}。

这是一些代码示例

min