我需要在Java中使用正好6位的随机数进行生成。我知道我可以在随机数上循环6次但是在标准的Java SE中有没有其他方法可以做到这一点?
编辑 - 跟进问题:
既然我可以生成我的6位数字,我遇到了一个新问题,我正在尝试创建的整个ID是语法123456-A1B45。那么我如何随机收集最后5个可能是A-Z或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 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;
}
答案 0 :(得分:67)
生成一个6位数字:
Random rnd = new Random();
int n = 100000 + rnd.nextInt(900000);
请注意n
永远不会是7位数(1000000),因为nextInt(900000)
最多只能返回899999
。
那么如何随机化最后5个可以是A-Z或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();
答案 1 :(得分:21)
生成100000
到999999
范围内的数字。
// pseudo code
int n = 100000 + random_float() * 900000;
我很确定你已经阅读过例如Random并且可以自己弄清楚其余部分。
答案 2 :(得分:6)
如果需要指定确切的字符长度,我们必须避免前面带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));
}
答案 3 :(得分:5)
试试这个:
public int getRandomNumber(int min, int max) {
return (int) Math.floor(Math.random() * (max - min + 1)) + min;
}
答案 4 :(得分:0)
int rand = (new Random()).getNextInt(900000) + 100000;
编辑:修正了1分之一错误并删除了无效的解决方案。
答案 5 :(得分:0)
对于后续问题,您可以获得介于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
编辑:
答案 6 :(得分:-1)
这会对你有用吗?
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
答案 7 :(得分:-2)
生成一个随机数(始终在0-1之间)并乘以1000000
Math.round(Math.random()*1000000);