【问题标题】:Non repeating random numbers in iOS? [duplicate]iOS中的非重复随机数? [复制]
【发布时间】:2011-12-07 04:54:02
【问题描述】:

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

如何生成不重复的随机数?

我在很多网站上都看到了这个,但他们给出了 main.c 文件代码。

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

示例:

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

【问题讨论】:

  • 您能提供不起作用的代码吗?当您说它不起作用时,您遇到了什么错误/问题?

标签: ios objective-c random


【解决方案1】:
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】:
    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】:

      希望以下代码行对您有所帮助

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

      此代码的好处是它不会允许重复的随机数。这里 limit 用于随机数。

      希望这是您正在寻找的。​​p>

      享受编码:)

      【讨论】:

        【解决方案4】:
            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);
        

        你能试试这个代码吗?可能对你来说已经用完了

        【讨论】:

        • 这是一个效率极低的算法。
        • 检查部分应该是:if (x ==[[storeArray objectAtIndex:j] intValue]) record = YES;休息; } 因为没有 BREAK 循环会检查所有的数组,即使已经找到了重复......
        【解决方案5】:

        试试这个:- 这将随机产生 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);
        }
        

        【讨论】:

          【解决方案6】:

          你可以这样做

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

          保存到数组 然后你可以设置一个条件,这将检查数组中是否存在该数字。 如果没有,则将其添加到数组中,如果已存在则简单地丢弃它。

          注意:“永远不要添加或乘以随机数以试图获得‘更好’的随机性 :)

          【讨论】:

            猜你喜欢
            • 2013-12-24
            • 1970-01-01
            • 1970-01-01
            • 2012-01-20
            • 1970-01-01
            • 2010-12-09
            相关资源
            最近更新 更多