Где найти srandom (time (null)) - PullRequest
0 голосов
/ 11 ноября 2011

Я использую функцию random ()% для некоторого целого числа в методе одного из классов моего приложения, и я понятия не имею, куда поместить srandom (time (NULL)), чтобы генерировать не псевдослучайные, а истинные случайные числа. Я уже поместил его в viewDidLoad и viewWillAppear, но это не помогает.

- (NSMutableDictionary *)getUsersFromServer
{
      srand(time(NULL));
      //here we're getting list of users from the server
      NSMutableDictionary * users = [[[NSMutableDictionary alloc] init] autorelease];

     for (int i = 0;i < 19;i++)
     {
      int wins    = rand()%100; float f_wins = (float)wins;
       int losses  = rand()%100;     float f_losses = (float)losses;
      int withdr  = rand()%100;         float f_withdr = (float)withdr;
      float win_per = f_wins / ((f_wins + f_losses + f_withdr) / 100.0);

      [userresults setArray:[NSMutableArray arrayWithObjects:[NSNumber numberWithInt:wins],
                                                   [NSNumber numberWithInt:losses],
                                                                                [NSNumber numberWithInt:withdr],
                                                                                [    NSNumber numberWithFloat:win_per],
                                                                                 nil]]; 
          [users setObject:userresults forKey:[NSString stringWithFormat:@"Pfeffer ID %i",i]];
   }

    [userresults release];
     return users;
}

как-то так ... код выглядит ужасно, но его смысл понятен. rand () создает одинаковые числа для каждой итерации цикла. Если я использую arc4random (), это ничего не меняет. все те же цифры

1 Ответ

2 голосов
/ 11 ноября 2011

Я не думаю, что это вообще проблема случайности или семян, я не использую Objective-C, но ...

// for each loop iteration:
  [userresults setArray: .... ]      // <-- modify object known as userresults?
  [users setObject:userresults ....] // <-- isn't that the SAME userresults object?

То есть, я полагаю, у вас есть один и тот же объект несколько раз в users: не должен ли новый результирующий объект создаваться на каждой итерации?

Также см. srand () - зачем вызывать его только один раз? - почему использование srand в начале этого метода может быть не идеальным. В качестве альтернативы этот пост рекомендует arc4random , так как он не требует ручного заполнения и является "более сильным" псевдослучайным генератором.

Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...