【问题标题】:How can I generate a unique random number each time when I run my application? [closed]每次运行应用程序时,如何生成唯一的随机数? [关闭]
【发布时间】:2011-04-06 10:20:25
【问题描述】:

在我的应用程序中,我想生成 9 位随机数,使它们具有唯一性。 每次运行应用程序时只应生成一个 9 位随机数,并且它应该是唯一的。稍后我想将此号码及其关联数据保存在 .txt 文件中,以便在需要时检索与此唯一号码关联的数据。 我应该如何做到这一点?

【问题讨论】:

  • 你可以使用你的文件的文件大小之前你写新的信息,并在左边用0填充。这样,该文件中的所有数字都是唯一的。

标签: java random unique


【解决方案1】:

您希望它们是真正随机的还是真正独特的?您只能拥有其中之一。

如果您希望它们真正随机,则只需从 0-9 中随机选择 9 位数字并将它们构建到您的数字中。重复的可能性很小,尤其是在迭代次数较多的情况下。不过,这将是真正随机的。

如果您希望它们真正独一无二,那么您必须将每一个都存储在数据库中以确保没有重复。如果生成副本,则需要重新生成或只是增加数字并重试。如果这是您要查找的内容,最好尝试从 1 开始递增该值。

【讨论】:

  • +1 用于区分随机和唯一
  • 我想要真正独特的数字...谢谢!它真的很简单。我可以将它们加一!
【解决方案2】:

对于唯一号码,请尝试:(new Date()).getTime() 除非您在一秒钟内生成多个号码,否则它将永远不会相同。

【讨论】:

  • 我不知道是谁给这个 -1 的,但这实际上是一个有效的点(只要你每秒不产生很多数字)。
  • @Roy:即使我也有同样的疑惑。为什么有人对此投了反对票。
  • -1 这不会生成九位随机数。它甚至不会生成随机数。它只是以毫秒为单位获取当前时间。这与 OP 的要求有何相似之处?我想知道为什么有人对此表示赞同。
  • 我没有否决它,但请注意,getTime() 不能保证返回一个唯一的数字。这只有在没有人操纵时钟的假设下才是正确的。
  • 恕我直言,这种方法确实不应该作为一种生成任何可能被称为“唯一”或“随机”的方法。它与实现这些品质中的任何一个都相差甚远。这真的不应该被交叉链接到同一主题的新问题中,因为它确实可能会将新程序员引向完全错误的方向。我只是作为一个关心的公民提出我的意见,并希望很明显我正在尝试提供建设性的反馈。
【解决方案3】:

您可以将随机类和系统时间(或使用系统时间的函数)结合起来,例如

  Random random = new Random(System.nanoTime());

  int randomInt = random.nextInt(1000000000);

您还可以在系统时间上使用某些功能,例如

  Random random = new Random(System.nanoTime() % 100000);

  int randomInt = random.nextInt(1000000000);

【讨论】:

    【解决方案4】:

    如果您只想要一个随机的 9 位数字,请尝试:

    long number = (long) Math.floor(Math.random() * 900000000L) + 10000000L;
    

    但是,如果您只想要一个唯一的号码,我会转而使用数据库。

    【讨论】:

    • 嗨!我希望它们是独一无二的。
    【解决方案5】:

    您要求的是一个唯一的标识符,它永远不能重复,根据定义,这不是一个随机数。

    您可能正在寻找的是 GUID,但它们比 9 位要长得多(因为如果您从全球范围来看,两次生成相同数字而只有 9 位的机会非常大)。

    无论如何,请查看这篇维基百科文章:http://en.wikipedia.org/wiki/Globally_unique_identifier

    编辑:澄清一下,GUID 具有某种随机性。

    【讨论】:

    • 还有一件事要记住:GUID 的子字符串并不一定是唯一的。
    • 是的,即使是完整的 GUID 也不能保证是唯一的 :)。
    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多