生成5位数字的随机引脚



我想根据一个随机数生成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]范围内的数字,但这只是一个尴尬的解决方案。

apache common lang3中的

RandomUtils.randomNumeric(int count)RandomUtils.randomNumeric(int inLength, int maxLength)也可以用于相同的目的。

最新更新