具有给定长度的Java随机数

我需要在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 AZ 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 AZ for(int i = 0; i<6;){ int ranAny = 48 + (new Random()).nextInt(90-65); if(!(57 < ranAny && ranAny<= 65)){ char c = (char)ranAny; val += c; i++; } } return val; } 

生成100000999999范围内的数字。

 // pseudo code int n = 100000 + random_float() * 900000; 

我很确定你已经阅读了例如Random的文档,并且可以自己弄清楚其余部分。

要生成一个6位数字:

使用RandomnextInt如下:

 Random rnd = new Random(); int n = 100000 + rnd.nextInt(900000); 

请注意, n永远不会是7位数(1000000),因为nextInt(900000)最多可以返回899999

那么如何随机化最后5个可以是AZ或0-9的字符呢?

这是一个简单的解决方案:

 // Generate random id, for example 283952-V8M32 char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray(); Random rnd = new Random(); StringBuilder sb = new StringBuilder((100000 + rnd.nextInt(900000)) + "-"); for (int i = 0; i < 5; i++) sb.append(chars[rnd.nextInt(chars.length)]); return sb.toString(); 

如果需要指定精确的字符长度,我们必须避免使用前面的0值。

最终字符串表示必须具有确切的字符长度。

 String GenerateRandomNumber(int charLength) { return String.valueOf(charLength < 1 ? 0 : new Random() .nextInt((9 * (int) Math.pow(10, charLength - 1)) - 1) + (int) Math.pow(10, charLength - 1)); } 

尝试这个:

 public int getRandomNumber(int min, int max) { return (int) Math.floor(Math.random() * (max - min + 1)) + min; } 
 int rand = (new Random()).getNextInt(900000) + 100000; 

编辑:修复了1个错误并删除了无效的解决方案。

对于后续问题,您可以获得介于36 ^ 5和36 ^ 6之间的数字,并将其转换为基数36

更新:

使用此代码

http://javaconfessions.com/2008/09/convert-between-base-10-and-base-62-in_28.html

它写成BaseConverterUtil.toBase36(60466176+r.nextInt(2116316160))

但是在你的用例中,它可以通过使用StringBuilder进行优化,并且数字的顺序相反,即71应该在Z1而不是1Z中转换

编辑:

这对你有用吗?

 public class Main { public static void main(String[] args) { Random r = new Random(System.currentTimeMillis()); System.out.println(r.nextInt(100000) * 0.000001); } 

}

结果例如0.019007

生成一个随机数(始终在0-1之间)并乘以1000000

 Math.round(Math.random()*1000000);