iPhone:random()函数每次给我相同的随机数

rkb*_*rkb 6 iphone random

我使用函数random()%x来生成随机数,但每次启动应用程序时,我都会看到它创建或生成相同的数字.

就像我根据随机数随机放置一些图像一样,无论我运行应用程序多少次,我都会看到所有图像都放在同一个地方.

jbr*_*nan 16

你可能会有更好的运气arc4random(),你不需要明确地播种它,它似乎是一个"更好"的随机.


Ada*_*ume 15

强制性XKCD漫画:

替代文字


Ale*_*lds 14

在您的应用程序委托中:

- (void) applicationDidFinishLaunching:(UIApplication *)application 
{
    srandom(time(NULL));

    // ...

    for (int i = 0; i < 100; i++) {
      NSLog(@"%d", random());
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法的原因是因为伪随机数生成器需要一个起始值或种子值.通过使用时间,您在每次执行时更有可能获得不同的"随机"数字序列.

如果未指定种子值,则在每次执行时使用相同的种子,从而生成相同的序列.这通常是不期望的行为,但在某些情况下,能够生成相同的序列(例如,用于测试算法)是有用的.

在大多数情况下,您需要指定将在运行之间更改的种子值,这是当前时间派上用场的地方.