请不要将其视为以下内容的重复项而将其忽略: 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) 就会导致溢出。
应该有更好的解决方案。谁能指点我一下。
谢谢!
最佳答案
如何使用BigInteger
来避免int
溢出。您也可以使用
new BigInteger(int numBits, Random rnd)
创建一些具有随机位的BigInteger
(最多使用numBits
指定的位)。
因此,只需计算您需要多少位(range.bitLength()
可能有用)检查随机值是否在指定范围内,因此如果值再次大于范围随机,如果一切都是OK 返回增加 min
的随机值。
这是一些代码示例
public static int myRandom(int min, int max, Random r){
if (max <= min)
throw new RuntimeException("max value must be greater than min value: max="+max +", min="+min);
BigInteger maxB = BigInteger.valueOf(max);
BigInteger minB = BigInteger.valueOf(min);
BigInteger range = maxB.subtract(minB);
do{
BigInteger result = new BigInteger(range.bitLength(), r);
if (result.compareTo(range)<=0)
return result.add(minB).intValueExact();
}while(true);
}
关于java - 生成一个范围内的随机数。无溢出。 java 语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884083/