首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在目标c中生成唯一的随机数?

在目标c中生成唯一的随机数?
EN

Stack Overflow用户
提问于 2011-11-08 20:55:09
回答 6查看 7.1K关注 0票数 2

我想生成一个介于31到60之间的随机数。

所以我使用了rand(),但我认为它会给我一些时间,我需要同样的value.But,每一次它都应该给我新的值。

我该怎么做呢?

EN

回答 6

Stack Overflow用户

发布于 2011-11-08 21:03:39

使用arc4random(),它将提供一个很好的随机数,并且不需要种子。

rand()将在应用程序每次运行时生成相同的序列,除非您为其设定一个唯一的值。

那么这就是一个缩小范围的问题。一个简单的解决方案是对范围进行mod,然后添加范围的低端。(这将导致应该可以接受的小偏差。)

示例:

代码语言:javascript
复制
int rangeLow = 31;
int rangeHigh = 60;
int randomNumber = arc4random() % (rangeHigh-rangeLow+1) + rangeLow;

如果您希望范围内的每个数字只出现一次,那么@pawan.mangal提供了一个很好的解决方案的链接。

票数 8
EN

Stack Overflow用户

发布于 2011-11-08 21:04:28

您可以使用arc4random()代替rand()

要从arc4random()获得从0到x-1的整数值,您可以这样做:

代码语言:javascript
复制
int value = arc4random() % x;

要获得1到x范围内的整数,只需添加1:

代码语言:javascript
复制
int value = (arc4random() % x) + 1;

最后,如果您需要生成浮点数,请在您的项目中定义:

代码语言:javascript
复制
#define ARC4RANDOM_MAX      0x100000000'

然后,可以使用arc4random()获得一个浮点值(精度是使用rand()的两倍),介于0和100之间,如下所示:

代码语言:javascript
复制
double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 100.0f);
票数 4
EN

Stack Overflow用户

发布于 2014-11-23 02:01:59

下面的方法将在你的问题中提到的low和high.as范围内生成一个唯一随机数数组,你需要31到60之间的随机数,所以数组中将有最多29个唯一数。

代码语言:javascript
复制
 -(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);

    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8050681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档