如何在Objective-C中生成1-99范围的随机数?

时间:2014-07-07 11:18:23

标签: ios objective-c random

这是我从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);
}

3 个答案:

答案 0 :(得分:2)

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

-(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);
}

答案 1 :(得分:0)

在启动arc4random之前尝试此命令

srand(time(NULL));

答案 2 :(得分:0)

如果我理解正确你想要一个在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];