iOS中不重复的随机数?

时间:2011-12-07 04:54:02

标签: ios objective-c random

  

可能重复:
  Non repeating random numbers in Objective-C

如何生成非重复随机数?

我在很多网站上都看过这个,但是他们提供了main.c文件代码。

当我使用main.c文件时,代码工作正常,但是当我尝试转换为my.m文件时,它无效。

示例:

我需要随机获取0-10之间的所有数字。数字不应再重复。

6 个答案:

答案 0 :(得分:2)

    NSMutableArray *storeArray = [[NSMutableArray alloc] init];    
    BOOL record = NO;
    int x;

    for (int i=0; [storeArray count] < 10; i++) //Loop for generate different random values
    {
        x = arc4random() % 10;//generating random number
        if(i==0)//for first time 
        {
          [storeArray addObject:[NSNumber numberWithInt:x]];  
        }
        else
        {
            for (int j=0; j<= [storeArray count]-1; j++) 
            {
                    if (x ==[[storeArray objectAtIndex:j] intValue]) 
                    record = YES;
            }

            if (record == YES) 
            {
                record = NO;
            }
            else
            {
                [storeArray addObject:[NSNumber numberWithInt:x]];
            }
        }
    }
    NSLog(@" Non Repeated Random Numbers : %@",storeArray);

你可以试试这段代码吗?可能是你的用途

答案 1 :(得分:2)

srand(time(NULL));
 int s[10];
 BOOL fl = 1;
for (int i = 0; i<10; i++) {
   while (fl) {
      s[i] = rand()%10;
      fl = 0;
      for (int j = 0; j < i; j++) {
         if (s[j] == s[i]) {fl = 1; j = i+1;}
      }
   }
}

答案 2 :(得分:2)

int n = 10;
NSMutableArray *numbers = [NSMutableArray array];
for (int i = 0; i <= n; i++) {
    [numbers addObject:[NSNumber numberWithInt:i]];
}
NSMutableArray *result = [NSMutableArray array];
while ([numbers count] > 0) {
    int r = arc4random() % [numbers count];
    NSNumber *randomElement = [numbers objectAtIndex:r];
    [result addObject:randomElement];
    [numbers removeObjectAtIndex:r];
}
NSLog(@"%@", result);

答案 3 :(得分:2)

希望以下代码行可以帮助您

srand(time(NULL));
int randomIndex = rand() % limit;
[reportIDTextField setText:[NSString stringWithFormat:@"%i", randomIndex]];

此代码的好处是它不允许重复的随机数。 限制 ,用于随机数。

希望这就是你要找的东西。

享受编码:)

答案 4 :(得分:0)

试试这个: - 这将随机产生0到10之间的数字。

 srand(time(NULL));
int n = 11;
int card[n];  
for (int y=0; y<n; y++) {
    card[y] = y;  
}
for(int q= 0 ;q<3;q++) { 
    for (int y=0; y<(n-1); y++) {
        int r = y + (arc4random() % (n-y));         
        int temp = card[y]; card[y] = card[r]; card[r] = temp;
    }
}
for (int g=0;g<n ; g++) {
    int w = card[g];
    NSLog(@"%i",w);
}

答案 5 :(得分:0)

你可以做这样的事情

number = (arc4random()%10)+1; //Generates Number from 1 to 10.

将其保存到数组中 然后你可以设置一个条件,这将检查数字是否存在于数组中。 如果没有,那么将它添加到数组中,如果它已经存在,那么只需将其丢弃。

注:“永远不要添加或增加随机数,以获得'更好'的随机性 :)