【问题标题】:How to generate random numbers from 1-99 range in Objective-C? [duplicate]如何在 Objective-C 中生成 1-99 范围内的随机数? [复制]
【发布时间】:2014-08-27 20:42:09
【问题描述】:

这是我生成 1-99 随机数的代码,但它每次只生成相同的一组数字(15 个数字)。我将这些数字存储在NSArray 中,并正确地在NSLog 中获得输出。没关系,但是每当我调用这个随机方法时,我都想要不同的随机数集,没有重复的数字。任何人都可以帮助我吗?

-(void) randoms
{

    myset=[[NSArray alloc]init];
    int D[20];
    BOOL flag;
    for (int i=0; i<15; i++)
    {
        int randum= random()%100;
        flag= true;
        int size= (sizeof D);

        for (int x=0; x<size; x++)
        {
            if (randum == D[x])
            {
                i--;
                flag= false;
                break;
            }
        }

        if (flag) D[i]=randum;

    }
    for (int j=0; j<15; j++)
        {
        myset=[myset arrayByAddingObject:[NSNumber numberWithInt:D[j]]];
        }

    NSLog(@"first set..%@",myset.description);
}

【问题讨论】:

  • 这很烦人。用有很好解释的代码做了一个很好的长答案,这个问题就结束了。我会将其添加到博客中,并在可能的情况下为您提供链接。
  • 虽然有一个元素是重复的——生成唯一的随机数,但也有将随机数放在一个集合中的元素,所以我已经提名重新打开
  • @Paulw11 有很多这样的问题在问这个问题。 Take your pick
  • @JeremyP 我同意随机播种是重复的,但不是在范围内创建一组唯一随机数。

标签: ios objective-c random


【解决方案1】:

在启动你的 arc4random 之前尝试这个命令

srand(time(NULL));

【讨论】:

【解决方案2】:

您必须在使用前播种生成器。如果您想跳过播种,可以使用 arc4random_uniform()。这是一种不同的算法,它自己负责播种过程。除此之外,您几乎可以像使用 random() 一样在代码中使用它。您只需将上限指定为参数,而不是使用模数:

-(void) randoms
{

    myset=[[NSArray alloc]init];
    int D[20];
    BOOL flag;
    for (int i=0; i<15; i++)
    {
        int randum= arc4random_uniform(100);
        flag= true;
        int size= (sizeof D);

        for (int x=0; x<size; x++)
        {
            if (randum == D[x])
            {
                i--;
                flag= false;
                break;
            }
        }

        if (flag) D[i]=randum;

    }
    for (int j=0; j<15; j++)
        {
        myset=[myset arrayByAddingObject:[NSNumber numberWithInt:D[j]]];
        }

    NSLog(@"first set..%@",myset.description);
}

【讨论】:

  • arc4random_uniform() 是要走的路
  • 谢谢,我不知道 arc4random_uniform()。编辑了答案,我将来可能会使用它而不是 arc4random()。
  • 是的,,, 你干得很棒.. 对我的帮助很大。
【解决方案3】:

如果我理解正确,您需要一个包含 1-99 之间的 15 个随机数的集合。您可以使用以下内容:

- (NSSet *)randomSetOfSize:(int)size lowerBound:(int)lowerBound upperBound:(int)upperBound {
    NSMutableSet *randomSet=[NSMutableSet new];
    while (randomSet.count <size) {
        int randomInt=arc4random_uniform(upperBound-lowerBound)+lowerBound;
        NSNumber *randomNumber=[NSNumber numberWithInt:randomInt];
        [randomSet addObject:randomNumber];
    }

    return randomSet;
}

并调用它

NSSet *myRandomSet=[self randomSetOfSize:14 lowerBound:1 upperBound:99];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多