关于ios:如何在Objective-C中生成1-99范围内的随机数?

How to generate random numbers from 1-99 range in Objective-C?

本问题已经有最佳答案,请猛点这里访问。

这是我从1到99生成随机数的代码,但每次只生成相同的一组数字(15个数字)。我将这些数字存储在NSArray中,并在NSLog中得到正确的输出。这没关系,但我希望每次调用这个随机方法时都有一组不同的随机数,没有重复的数字。有人能帮我吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
-(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);
}


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
-(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);
}


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

1
2
3
4
5
6
7
8
9
10
- (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;
}

然后打电话给

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


在启动arc4random之前尝试此命令

1
srand(time(NULL));