我正在尝试生成一个介于0和我的数组大小之间的随机数:
float randomNum = (rand() / RAND_MAX) * [items count];
NSLog(@"%f",randomNum);
NSLog(@"%d",[items count]);
randomNum始终为0.0000000
答案 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)