每次运行应用程序时,如何生成一个独特的随机数?

6

在我的应用程序中,我希望生成九位数的随机数字,并确保它们是唯一的。每次运行应用程序时,只能生成一个九位数的随机数字,并且这个数字必须是唯一的。之后,我想将此数字与其相关数据保存在一个 .txt 文件中,以便需要时可以检索与此唯一数字相关联的数据。如何实现这一目标?


你可以在写入新信息之前使用文件大小,并在左侧填充0。 这样,该文件中的所有数字都将是唯一的。 - Ingo
请查看以下帖子:https://dev59.com/7HVD5IYBdhLWcg3wDXF3 - jwerre
5个回答

18

你想让他们真正随机还是真正独一无二?只能选择其中一种。

如果你想让它们真正随机,那么只需从0-9中随机选择9个数字,将它们组合成你的数字。在大量迭代过程中可能会出现重复的小概率事件,但它将是真正随机的。

如果你想让它们真正独一无二,那么你必须将每个数字存储在数据库中以确保没有重复。如果生成了一个重复的数字,你需要重新生成或者增加数字并重试。如果这就是你所寻找的,那么从一开始逐渐增加数值可能是一个不错的选择。


6
感谢夸赞区分随机和独特的做法。 - CodeClimber
1
我想要真正独特的数字...谢谢!这真的很简单。我可以将它们逐一增加! - bhabs

13

想要生成唯一的数字,请尝试使用如下代码:(new Date()).getTime(),该代码每秒只能生成一个唯一的数字。


我不知道是谁给这个点赞了,但这实际上是一个有效的观点(只要你不每秒生成大量数字)。 - Roy T.
1
@Roy:我也在想同样的问题。为什么有人会给这个点踩呢? - Harry Joy
2
这不会生成九位随机数,甚至不会生成任何随机数,只是获取当前时间的毫秒数。这跟原帖要求的有什么相似之处吗?我想知道为什么有人给这个点赞。 - Erick Robertson
3
我没有给它点踩,但请注意,getTime() 不一定保证返回一个唯一的数字。这仅在假设没有人操作时为真。 - Ingo
1
恕我直言,这种方法真的不应该被提供作为生成任何可能被称为“独特”或“随机”的方式。它根本无法实现这两个品质中的任何一个。这确实不应该与同一主题的新问题进行交叉链接,因为它真的可能会使新程序员走向完全错误的方向。我只是作为一个关心的公民提出我的意见,并希望清楚地表明我正在尝试给予建设性的反馈。 - Sean Mickey
显示剩余4条评论

8
您可以结合Random类和系统时间(或使用系统时间的函数)来实现,例如:
  Random random = new Random(System.nanoTime());

  int randomInt = random.nextInt(1000000000);

您可以使用系统时间的一些函数,例如:
  Random random = new Random(System.nanoTime() % 100000);

  int randomInt = random.nextInt(1000000000);

2
如果你只需要一个随机的9位数字,可以尝试以下方法:
long number = (long) Math.floor(Math.random() * 900000000L) + 10000000L;

然而,如果你只是想要一个唯一的数字,我建议使用数据库。


嗨!我希望它们是独一无二的。 - bhabs

1
你所要求的是一个唯一标识符,它永远不会重复,这从定义上来说不是一个随机数。
你可能正在寻找的是GUID,但这些比9位数字长得多(因为如果从全球范围来看,仅有9位数字生成相同的数字的机会非常大)。
无论如何,请查看这篇维基百科文章:http://en.wikipedia.org/wiki/Globally_unique_identifier 编辑:澄清一下,GUID具有某种随机性质。

还有一件事需要记住:GUID的子字符串不保证是唯一的。 - Joey
即使是完整的 GUID 也不能保证是唯一的 true。 - Roy T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接