【问题标题】:Get a set of "static" random values everyday每天获取一组“静态”随机值
【发布时间】:2013-02-11 19:52:41
【问题描述】:

这是所有擅长操纵随机化的人的问题。我正在Android中制作应用程序。对于这个应用程序,我需要生成具有以下条件的随机值:

  • 我需要生成13个随机值

  • 我需要每天获取一组新的这 13 个随机值(基于用户设备的系统)。在一天中,这 13 个值不得更改。

  • 我需要在本地生成这些值,即用户无法连接到互联网以在线获取值。

  • 现在困难的部分:我需要这些值对于每一天都是“唯一的”:用户 1 获得的 13 个随机值必须与用户 2 获得的 13 个值相同。

  • 每个值都有自己的范围(有些是 [1-100],有些是 [1-40])

我对解决方案的第一个假设是使用来自设备系统的日期值的组合(一年中的一天、一个月中的一天、一周中的一天等),因为这些对于每个用户来说都是相同的。我不能使用小时、分钟或秒,因为这 13 个值需要在一整天内保持不变(它们只会在第二天更改,具体取决于设备系统)。

我很想看看你的想法。

谢谢

编辑:如果时区之间的值不同也没关系。

【问题讨论】:

  • 如果基于设备的系统,每个用户如何获取唯一值?
  • 不过,如果用户由于时区差异(或只是为了好玩/黑客)而在他们的系统上没有相同的日期怎么办?
  • @kaya:系统数据应该用于确定当前日期,仅此而已。
  • @Hemmo:感谢您指出这一点:我已经用以下内容编辑了我的问题:如果时区之间的值不同也没关系。

标签: android math random


【解决方案1】:

常用的Random 中的数字是pseudorandom。这意味着对于给定的种子,它们是可预测的。您可以将种子设置为自某个时间点以来的天数。例如,由于1 January 1970。然后取 13 个伪随机值。在那一天,它们在所有设备上都是一样的。第二天,您创建另一个 Random,种子 + 1,取 13 个伪随机值,依此类推。

【讨论】:

  • 亚当看起来确实是个好主意,但是如果我每天添加+1,价值不会增加吗?我需要避免从一天到另一天的任何趋势感
  • @Kintaro 您正在为种子添加价值,而不是为伪随机值本身添加价值,因此值没有趋势,只是在种子中无关紧要。检查例如en.wikipedia.org/wiki/Random_seed
  • 是的,当然种子值必须改变,我的错。感谢您的回答,这是我已经实现的,它似乎可以进行一些测试
【解决方案2】:

您认为可能是最直接的方法。对于大多数事情来说,一个简单的种子就可以了。

Calendar cal = new GregorianCalendar(); 
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long seed = cal.getTime().getTime();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多