我想生成一个介于31到60之间的随机数。
所以我使用了rand(),但我认为它会给我一些时间,我需要同样的value.But,每一次它都应该给我新的值。
我该怎么做呢?
发布于 2011-11-08 21:03:39
使用arc4random(),它将提供一个很好的随机数,并且不需要种子。
rand()将在应用程序每次运行时生成相同的序列,除非您为其设定一个唯一的值。
那么这就是一个缩小范围的问题。一个简单的解决方案是对范围进行mod,然后添加范围的低端。(这将导致应该可以接受的小偏差。)
示例:
int rangeLow = 31;
int rangeHigh = 60;
int randomNumber = arc4random() % (rangeHigh-rangeLow+1) + rangeLow;如果您希望范围内的每个数字只出现一次,那么@pawan.mangal提供了一个很好的解决方案的链接。
发布于 2011-11-08 21:04:28
您可以使用arc4random()代替rand()
要从arc4random()获得从0到x-1的整数值,您可以这样做:
int value = arc4random() % x;要获得1到x范围内的整数,只需添加1:
int value = (arc4random() % x) + 1;最后,如果您需要生成浮点数,请在您的项目中定义:
#define ARC4RANDOM_MAX 0x100000000'然后,可以使用arc4random()获得一个浮点值(精度是使用rand()的两倍),介于0和100之间,如下所示:
double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 100.0f);发布于 2014-11-23 02:01:59
下面的方法将在你的问题中提到的low和high.as范围内生成一个唯一随机数数组,你需要31到60之间的随机数,所以数组中将有最多29个唯一数。
-(void)generateRandomUniqueNumberInRange :(int)rangeLow :(int)rangeHigh{
NSMutableArray *unqArray=[[NSMutableArray alloc] init];
int randNum = arc4random() % (rangeHigh-rangeLow+1) + rangeLow;
int counter=0;
while (counter<rangeHigh-rangeLow) {
if (![unqArray containsObject:[NSNumber numberWithInt:randNum]]) {
[unqArray addObject:[NSNumber numberWithInt:randNum]];
counter++;
}else{
randNum = arc4random() % (rangeHigh-rangeLow+1) + rangeLow;
}
}
NSLog(@"UNIQUE ARRAY %@",unqArray);
}https://stackoverflow.com/questions/8050681
复制相似问题