生成5位随机引脚

时间:2015-11-21 18:48:36

标签: java

我想根据我在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”之前再次生成。

3 个答案:

答案 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)

来自apache common lang3的

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