【发布时间】:2011-04-06 10:20:25
【问题描述】:
在我的应用程序中,我想生成 9 位随机数,使它们具有唯一性。 每次运行应用程序时只应生成一个 9 位随机数,并且它应该是唯一的。稍后我想将此号码及其关联数据保存在 .txt 文件中,以便在需要时检索与此唯一号码关联的数据。 我应该如何做到这一点?
【问题讨论】:
-
你可以使用你的文件的文件大小之前你写新的信息,并在左边用0填充。这样,该文件中的所有数字都是唯一的。
在我的应用程序中,我想生成 9 位随机数,使它们具有唯一性。 每次运行应用程序时只应生成一个 9 位随机数,并且它应该是唯一的。稍后我想将此号码及其关联数据保存在 .txt 文件中,以便在需要时检索与此唯一号码关联的数据。 我应该如何做到这一点?
【问题讨论】:
您希望它们是真正随机的还是真正独特的?您只能拥有其中之一。
如果您希望它们真正随机,则只需从 0-9 中随机选择 9 位数字并将它们构建到您的数字中。重复的可能性很小,尤其是在迭代次数较多的情况下。不过,这将是真正随机的。
如果您希望它们真正独一无二,那么您必须将每一个都存储在数据库中以确保没有重复。如果生成副本,则需要重新生成或只是增加数字并重试。如果这是您要查找的内容,最好尝试从 1 开始递增该值。
【讨论】:
对于唯一号码,请尝试:(new Date()).getTime() 除非您在一秒钟内生成多个号码,否则它将永远不会相同。
【讨论】:
您可以将随机类和系统时间(或使用系统时间的函数)结合起来,例如
Random random = new Random(System.nanoTime());
int randomInt = random.nextInt(1000000000);
您还可以在系统时间上使用某些功能,例如
Random random = new Random(System.nanoTime() % 100000);
int randomInt = random.nextInt(1000000000);
【讨论】:
如果您只想要一个随机的 9 位数字,请尝试:
long number = (long) Math.floor(Math.random() * 900000000L) + 10000000L;
但是,如果您只想要一个唯一的号码,我会转而使用数据库。
【讨论】:
您要求的是一个唯一的标识符,它永远不能重复,根据定义,这不是一个随机数。
您可能正在寻找的是 GUID,但它们比 9 位要长得多(因为如果您从全球范围来看,两次生成相同数字而只有 9 位的机会非常大)。
无论如何,请查看这篇维基百科文章:http://en.wikipedia.org/wiki/Globally_unique_identifier
编辑:澄清一下,GUID 具有某种随机性。
【讨论】: