我想根据一个随机数生成Unique Pins我在Stack Overflow上发现了这一点如何生成一个随机的五位数Java。这个问题需要时间来生成数字,所以你会得到很多重复的数字。
这是我的代码
public int createRandomPin() {
int k = random.nextInt(Integer.SIZE);
k = (k + 1) * 9999;
if (9999 > k || k > 99999) {
//then regenerate
} else {
return k;
}
}
我的问题
Java编译器随后给出一个缺少"return"的警告。同样,我需要重组代码,这样如果它不是一个5位数的引脚,它会在"返回k"之前再次生成。
我建议使用SecureRandom类生成随机数,然后使用random创建一个介于0和99999之间的随机数。nextInt(100000),这里0是包含的,100000是独占的,然后通过添加0将其格式化为5位。
SecureRandom random = new SecureRandom();
int num = random.nextInt(100000);
String formatted = String.format("%05d", num);
System.out.println(formatted);
我希望这能解决你的问题
编辑:这篇文章错误地说10000,已编辑为100000
Integer.SIZE
产生int
数据类型的位数。这与随机值的范围跨度无关。
使用它作为Random.nextInt
的自变量没有任何意义(实际上它生成了一个范围为[0,32)
的随机值)。
只需生成一个int value = random.nextInt(100000)
,就可以在[0,99999]
中获得一个值。
现在你对5位数引脚的定义并不精确,40
可以被解释为00040
,所以如果你把它焊起来,它仍然是5位数。你必须考虑到这一点,因为强制5个"可见"数字意味着生成一个在[10000,99999]
范围内的数字,但这只是一个尴尬的解决方案。
RandomUtils.randomNumeric(int count)
或RandomUtils.randomNumeric(int inLength, int maxLength)
也可以用于相同的目的。