2009-09-17 5 views
2

Я использовал rand(). Но он дает определенное значение даже после перезапуска приложения.генерирование случайных значений в iPhone

В моем приложении реализовано следующее.

- (void)viewDidLoad { 
[super viewDidLoad]; 
int x,y; 

x=random() % 480; y=random() % 300; 

lblT.center=CGPointMake(x,y); // my label lblT 
} 

Попробуйте реализовать в своем приложении и запустить приложение. После перезапуска приложения вы обнаружите, что метка будет иметь определенное значение.

ответ

13

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

8

Используйте следующую строку перед случайным()

srand(time(NULL));

2

генераторы случайных чисел в программном обеспечении действительно дают псевдослучайных последовательностей значений.

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

Я не знаю о вашем программном обеспечении, но это не похоже на то, что вы высеиваете генератор случайных чисел, Gcamp, вероятно, находится на правильном пути.

1

Поскольку вы используете случайный() и не RAND() вы должны засеять генератор случайных чисел с помощью этого бита кода ...

srandomdev();

1

Я хотел бы сделать это следующим образом:

пейзаж:

- (void)viewDidLoad { 
[super viewDidLoad]; 


int x = arc4random()%480; 
int y = arc4random()%320; 

lblT.center=CGPointMake(x,y); 
} 

не Landscap е:

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    int x = arc4random()%320; 
    int y = arc4random()%480; 

    lblT.center=CGPointMake(x,y); 
    } 
+0

вы можете использовать arc4random_uniform (значение); вместо оператора мод – Mikhail

1

использовать этот код, только для Integer случайных величин

#define random(min,max) ((arc4random() % (max-min+1)) + min) 

тестирования

for (int i = 0; i < 500; i++) { 
    NSLog(@"rand is %d", random(-100,100)); 
} 
Смежные вопросы