我需要生成0(包括)到n(不包括)范围内的任意大的随机整数.我最初的想法是调用nextDouble并乘以n,但是一旦n大于2 53,结果将不再均匀分布.
BigInteger 有以下构造函数可用:
public BigInteger(int numBits, Random rnd)
Run Code Online (Sandbox Code Playgroud)
构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内,包括0和(2 numBits - 1).
如何使用它来获得0到n范围内的随机值,其中n不是2的幂?
我需要在Java中使用正好6位的随机数进行生成.我知道我可以在一个随机数上循环6次但是在标准Java SE中有没有其他方法可以做到这一点?
编辑 - 跟进问题:
现在,我可以生成我的6位数,我遇到了一个新问题,我正在尝试创建的整个ID是语法123456-A1B45.那么我如何随机化最后5个可以是AZ或0-9的字符?我正在考虑使用char值和randomice一个介于48 - 90之间的数字,并简单地删除任何获得代表58-64的数字的值.这是要走的路还是有更好的解决方案?
编辑2:
这是我的最终解决方案.谢谢你所有的帮助!
protected String createRandomRegistryId(String handleId)
{
// syntax we would like to generate is DIA123456-A1B34
String val = "DI";
// char (1), random A-Z
int ranChar = 65 + (new Random()).nextInt(90-65);
char ch = (char)ranChar;
val += ch;
// numbers (6), random 0-9
Random r = new Random();
int numbers = 100000 + (int)(r.nextFloat() * 899900);
val += String.valueOf(numbers);
val += "-";
// char or numbers (5), random 0-9 A-Z
for(int …Run Code Online (Sandbox Code Playgroud)