【问题标题】:Generating a Random Pin of 5 Digits生成 5 位随机引脚
【发布时间】:2016-02-24 03:40:55
【问题描述】:

我想根据我在 Stack Overflow How to generate a random five digit number Java 上找到的随机数生成唯一 Pin 图。该问题使用时间来生成数字,因此您会得到很多重复。

这是我的代码

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 位数的 pin,它会在“返回 k”之前再次生成。

【问题讨论】:

    标签: java


    【解决方案1】:

    我建议使用 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

    【讨论】:

    • 如果你使用String.format,那么每次你都会得到5位数字,即如果数字的位数少于五位,则将附加零。
    • 我已经尝试过你的生成图钉的方法比其他方法好得多。我需要添加一些可以测试引脚是否为 5 位的东西,如果不是,它会重新生成。否则它会返回它。
    • @User 在我的情况下,生成的数字始终为 5 位数字,因为如果小于 5 位数字,将填充“0”。
    【解决方案2】:

    Integer.SIZE 产生int 数据类型的位数。这与随机值的范围跨度无关。

    将它用作Random.nextInt 的参数没有任何意义(实际上它会在[0,32) 范围内生成一个随机值)。

    只需生成一个 int value = random.nextInt(100000),这样您就可以在 [0,99999] 中获得一个值。

    现在您对 5 位 pin 的定义并不精确,40 可以解释为 00040,因此如果您填充它,它仍然是 5 位。您必须考虑到这一点,因为强制 5 个“可见”数字意味着在 [10000,99999] 范围内生成一个数字,但这只是一个尴尬的解决方案。

    【讨论】:

      【解决方案3】:

      来自 apache common lang3 的RandomUtils.randomNumeric(int count)RandomUtils.randomNumeric(int inLength, int maxLength) 也可用于相同目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2014-10-29
        相关资源
        最近更新 更多