我想根据我在Stack Overflow How to generate a random five digit number Java上找到的随机数生成Unique Pins。该问题使用时间来生成数字,因此您可以获得大量重复项。
这是我的代码
public int createRandomPin() {
int k = random.nextInt(Integer.SIZE);
k = (k + 1) * 9999;
if (9999 > k || k > 99999) {
//then regenerate
} else {
return k;
}
}
我的问题
然后NetBeans会发出错误“返回”的警告。我还需要重新构造代码,这样如果它不是一个5位数的引脚,它会在“返回k”之前再次生成。
答案 0 :(得分:9)
我建议使用SecureRandom类生成随机数,然后因为它需要5位数,使用random.nextInt(100000)创建0到99999之间的随机数,这里0是包含的,100000是独占的然后格式化通过追加零到5位数。
SecureRandom random = new SecureRandom();
int num = random.nextInt(100000);
String formatted = String.format("%05d", num);
System.out.println(formatted);
我希望这能解决你的问题
编辑:此帖错误地说10,000,已编辑为100,000
答案 1 :(得分:1)
Integer.SIZE
生成int
数据类型的位数。这与随机值的范围跨度无关。
使用它作为Random.nextInt
的参数没有任何意义(实际上它会在范围[0,32)
中生成随机值)。
只需生成一个int value = random.nextInt(100000)
,即可获得[0,99999]
中的值。
现在您对5位数字图钉的定义不准确,40
可以解释为00040
,因此如果您填充它,它仍然是5位数。你必须考虑到这一点,因为迫使5"可见"数字意味着生成范围[10000,99999]
中的数字,但这只是一个尴尬的解决方案。
答案 2 :(得分:0)
RandomUtils.randomNumeric(int count)
或RandomUtils.randomNumeric(int inLength, int maxLength)
也可用于同一目的。