Com aconseguir un nombre aleatori?

Bé, la pregunta es la de l'enunciat, i es que estic fent unes proves i no em surt... el que he intentat es:

-(void) awakeFromNib{

count=rand()*100+1;
NSLog(@"next:%d",count);
}
però el que pasa es que sempre em surt "8"...

Jaime  sep  08 juliol 2008 20:30

Aquestes llibreries de C, cal inicialitzar-les amb una "llavor" amb la funció "srand(enter)". El millor és utilitzar el valor de l'hora en format enter, de manera que a cada execució tindràs una llavor diferent.

Xin  sep  08 juliol 2008 21:12

Però si necessites tot sovint generar nombres aleatoris, el millor és crear-te una classe que te'ls generi de tot tipus, amb límits, com enters, en coma flotant, ...

Xin  sep  08 juliol 2008 21:15

Si, això no ho acabo d'entendre, però he trobat una solució que em funciona i es aquesta:

-(void) awakeFromNib{
srand((unsigned)time(0));
count=rand()*100+1;
NSLog(@"next:%d",count);
}
així es correcte, no?

Jaime  sep  08 juliol 2008 21:17

no entenc lo de la llavor, lo de la classe, de moment no em cal, però ho recordaré :)

Jaime  sep  08 juliol 2008 21:19

Hm... ja he necessitat fer la classe... i lo de la llavor, mes o menys o entenc, el que no sé es que puc utilitzar com inicialitzador.

Jaime  sep  08 juliol 2008 21:29

L'inicialitzador és un número a partir del qual es generaran els valors aleatoris. Per una mateixa llavor, tots els valors seran de la mateixa sèrie. Cada cop diferents, però sempre iguals.

Així que et cal una "llavor" que sigui un valor que variï. I l'hora, si tingués milisegons millor, és un valor que canvia sempre.

No cal que activis l'inicialitzador cada cop que vols un nombre aleatori, només que ho facis al principi, els nombres aniran variant a cada nou "rand()" que executis.

Xin  sep  08 juliol 2008 22:08

Fa temps d'aquest tema, però volia comentar que el mateix es pot fer amb arc4random i no cal inicialitzar-lo perquè ho fa la pròpia funció automàticament.

 sep  31 octubre 2008 12:19

Selecciona'l abans d'enviar el commentari