选择大于Integer.MAX_VALUE的范围内的随机整数?

pre*_*per 4 java random

我知道在一个范围内还有另外一个关于随机的问题,但他们的答案都没有完成我想要做的事情.实际上他们有同样的错误.我写了这个简单的函数来生成随机范围.

Random m_random = new Random();
...
public int RandomWithRange(int min, int max) {
    return m_random.nextInt(max - min + 1) + min;
}
Run Code Online (Sandbox Code Playgroud)

如果range大于Integer.MAX_VALUE,则抛出IllegalArgumentException:n必须为正数.我知道它溢出并转向负数.我的问题是如何处理?

示例范围;

  • [0,Integer.MAX_VALUE]
  • [Integer.MIN_VALUE,Integer.MAX_VALUE]
  • [-100,Integer.MAX_VALUE]

注意:min和max必须包含在内.

Hak*_*rce 6

在这种情况下,您不能使用int.你需要使用BigInteger.以下构造函数执行您想要的操作(当然需要根据您的需要进行调整):

BigInteger(int numBits, Random rnd) 
Run Code Online (Sandbox Code Playgroud)

构造一个随机生成的BigInteger,均匀分布在0到(2numBits - 1)的范围内,包括0和(2numBits - 1).