2014-01-19 22 views
0

我花了兩個標籤&發生在他們身上隨機運營商提供此代碼:生成兩個變量不同的隨機操作人員在Objective-C的iOS

NSArray *operators = @[@"+", @"-", @"*", @"/"]; 
int  randomOperatorIndex = arc4random_uniform(4); 
NSString *randomOperator = operators[randomOperatorIndex]; 

但兩個標籤都產生相同的隨機操作。我想在兩個標籤上生成不同的操作符。 如:

如果標籤1產生 「+」

然後標記-2應產生 「/」

但現在標記-1 &標籤2具有產生隨機算後相同的運營商。

我該如何在Objective-C的iOS上做到這一點?

+4

你只產生一個'randomOperatorIndex'。你需要兩個!爲了確保它們不相同,在生成第二個隨機索引之前,使用可變數組並在第一個隨機索引處刪除該項目(並減小隨機搜索的大小)。把它想象成從甲板上發牌。 – matt

回答

0

試試這個:

// Returns an array of unique random numbers with range 
-(NSMutableArray *)getRandomNumbersOfSize:(int) size from:(int) lowerLimit to:(int) higherLimit 
{ 
    NSMutableArray *uniqueNumbers = [[NSMutableArray alloc] init]; 
    int r; 
    while ([uniqueNumbers count] < size) 
    { 
     r = lowerLimit + arc4random_uniform(higherLimit - lowerLimit + 1) ; 
     if (![uniqueNumbers containsObject:[NSNumber numberWithInt:r]]) 
     { 
      [uniqueNumbers addObject:[NSNumber numberWithInt:r]]; 
     } 
    } 
    return uniqueNumbers; 
} 

而在你的方法,你需要的唯一的隨機標籤:

NSArray *operators = @[@"+", @"-", @"*", @"/"]; 
     NSMutableArray*  randomOperatorIndexArray = [self getRandomNumbersOfSize:2 
                       from:0 
                        to:([operators count]-1)]; 

     for(int j=0;j<[randomOperatorIndexArray count];j++) 
     { 
      NSString *randomOperator = [operators objectAtIndex:[[randomOperatorIndexArray objectAtIndex:j] intValue]]; 
      NSLog(@"%@",randomOperator); 
     }