问题随机化Objective-C中的数字

时间:2011-02-26 21:42:33

标签: iphone objective-c random floating-point numbers

我正在尝试生成一个介于0和我的数组大小之间的随机数:

    float randomNum = (rand() / RAND_MAX) * [items count];
    NSLog(@"%f",randomNum);
    NSLog(@"%d",[items count]);

randomNum始终为0.0000000

6 个答案:

答案 0 :(得分:6)

  

randomNum始终为0.0000000

那是因为你正在进行整数除法而不是浮点除法; (rand() / RAND_MAX)几乎总是为0.(练习给读者:什么时候不是0?)

这是解决这个问题的一种方法:

float randomNum = ((float)rand() / (float)RAND_MAX) * [items count];

您还应该使用arc4random代替。

答案 1 :(得分:5)

请改为尝试:

int randomNum = arc4random() % ([items count] +1);

请注意randomNum不会作为数组引用。要做到这一点,你想要:

int randomRef = arc4random() % [items count];
id myRandomObject = [myArray objectAtIndex:randomRef];

arc4random()会返回一个u_int32_t(int),这样就可以轻松转移到像骰子,数组和其他现实问题这样的东西,而不像rand()

答案 2 :(得分:2)

如果你希望它在0和你的数组大小之间,它应该是:

randomNum = random() % [items count];  // between 0 and arraySize-1


如果您想要包含数组大小:

randomNum = random() % ([items count]+1);  // between 0 and arraySize

答案 3 :(得分:1)

尝试rand() * [items count];

IIRC,rand()返回0到1之间的值。

答案 4 :(得分:1)

人们说arc4random()是最好的方法......

您可以通过这种方式使用它来获取范围内的数字:

int fromNumber = 0;
int toNumber = 50;
float randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
NSLog(@"random number is:  %f",randomNumber); // you'll get from 0 to 49

...

int fromNumber = 12;
int toNumber = 101;
float randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
NSLog(@"random number is:  %f",randomNumber); // you'll get from 12 to 100

答案 5 :(得分:0)

在使用rand()之前,你必须设置一个种子,你可以通过调用srand函数并传递种子来实现。

有关srand文档的信息,请参见here,有关rand的信息,请参见here