【问题标题】:Random number function is misfiring随机数功能失灵
【发布时间】:2009-07-01 10:19:30
【问题描述】:

我有一个非常简单的 iPhone 应用程序,它需要一个 1-100 的随机整数。

我有一个按钮,它调用随机数函数然后显示它。

-(IBAction)buttonReleased;
{
    srandom(time(NULL)); 
    int theNum = random() % 100 + 1;
    numberDisplay.text = [NSString stringWithFormat:@"%d", theNum];
}

问题是,如果我快速按下按钮,有时它不会显示新的随机数。

【问题讨论】:

    标签: c objective-c iphone random


    【解决方案1】:

    问题是您使用time 播种。

    time 仅每秒更新一次,因此如果您在一秒钟内单击它,您将使用相同的编号为生成器播种,这意味着您将获得相同的编号。

    您应该只在应用程序开始时播种一次。

    【讨论】:

    • 另外,人们应该播种比时间更精确的东西。试试 (CFAbsoluteTimeGetCurrent() * 1000)
    • 为什么,如果我在应用启动时只播种一次?我想学习。
    • 为什么要使用更高的计时器精度?如果你一开始就播种,你真的不需要。然而,如果你想变得更脏,一个好的种子需要好的随机位。时间并不是非常随机的,因为较低的位每秒都在更新,而较高的位是相对静态的。通过使用更高精度的计时器,更高的位会更频繁地变化,从而提供更随机的种子。总而言之,为了一个好的旧随机数,在开始时使用 time 播种并忘记它非常有效。
    【解决方案2】:
    srandom(time(NULL)); 
    

    不要在每次生成随机数时都这样做。在您的应用程序启动时执行一次。

    原因:每次使用特定号码调用srandom() 时,都会从 random() 中获得相同的伪随机数序列。所以如果你在同一秒内调用你的函数两次,你会得到相同的数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多