在Objective-C中随机生成数字的问题

3
我正在尝试生成一个在0和数组大小之间的随机数:
    float randomNum = (rand() / RAND_MAX) * [items count];
    NSLog(@"%f",randomNum);
    NSLog(@"%d",[items count]);

randomNum始终为0.0000000。

6个回答

6

randomNum始终为0.0000000

这是因为你在进行整数除法而不是浮点数除法;(rand() / RAND_MAX)几乎总是为0。(读者可以自行思考:何时不为0?)

以下是一种修复方法:

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

你应该使用arc4random代替。


我仍然使用那段代码片段得到0。 - Sheehan Alam
@SheehanAlam 做个好事,改用 arc4random 吧。 - Shaggy Frog

5
尝试使用以下内容代替:
int randomNum = arc4random() % ([items count] +1);

请注意,randomNum 不能作为数组引用。要实现这一点,您需要使用以下代码:
int randomRef = arc4random() % [items count];
id myRandomObject = [myArray objectAtIndex:randomRef];

arc4random() 返回一个 u_int32_t (整数),这使它更容易用于像骰子、数组和其他现实世界的问题,与 rand() 不同。


2
如果您希望它在0和数组大小之间,应该是:
randomNum = random() % [items count];  // between 0 and arraySize-1

如果您想包含数组大小:
randomNum = random() % ([items count]+1);  // between 0 and arraySize

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

1
尝试使用rand() * [items count]; 如果我没记错,rand()返回0到1之间的值。

0
在使用rand()函数之前,您必须设置一个种子,可以通过调用srand函数并传递一个种子来实现。
请参阅此处以获取srand文档和此处以获取rand文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接