Objective-C随机数发生器用于彩票选择器bug

时间:2011-06-19 03:14:40

标签: objective-c xcode xcode4

我在objective-c中汇总了一些代码,以帮助我为彩票选择器程序创建一个随机数生成器。但我似乎有一个问题,即使有一个声明要先检查它,它有时会在5个不同的列中出现相同的数字。 当它编译并运行时,它将创建随机数,并且大多数时候它们是不同的,但它会在不同的时间在两行中得到相同的数字而不应该。

我已经尝试过使用rand()和arc4random()这两个问题同时给我带来了同样的问题。

int rNumber1 = arc4random() % 55 + 1; // 55 because it chooses from 0 to 55 then we add one, max 56
int rNumber2 = arc4random() % 55 + 1; // 55 because it chooses from 0 to 55 then we add one, max 56
int rNumber3 = arc4random() % 55 + 1; // 55 because it chooses from 0 to 55 then we add one, max 56
int rNumber4 = arc4random() % 55 + 1; // 55 because it chooses from 0 to 55 then we add one, max 56
int rNumber5 = arc4random() % 55 + 1; // 55 because it chooses from 0 to 55 then we add one, max 56

// First number box result
textView01.text = [[NSString alloc] initWithFormat:@"%d",  rNumber1];

// Second number box result not equal to first box number
if (rNumber2 != rNumber1) {
textView02.text = [[NSString alloc] initWithFormat:@"%d",  rNumber2];
} ;

// Third number box result not equal to first or second box number
if (rNumber3 != rNumber1 || rNumber2){
textView03.text = [[NSString alloc] initWithFormat:@"%d",  rNumber3];    
} ;

// Fourth box number result not equal to first, second or third number box number    
if(rNumber4 != rNumber1 || rNumber2 || rNumber3){
    textView04.text = [[NSString alloc] initWithFormat:@"%d",  rNumber4];    
} ;

// Fifth box number result not equal to first, second, third or fourth number box number
if (rNumber5 != rNumber1 || rNumber2 || rNumber3 || rNumber4){
    textView05.text = [[NSString alloc] initWithFormat:@"%d",  rNumber5];    
} ;

// Sixth box number independant of other boxes, up to 46 max number
int rNumber6 = rand() % 45 + 1;  // 45 because it chooses from 0 to 45 then we add one, max 46
textView06.text = [[NSString alloc] initWithFormat:@"%d",  rNumber6];

2 个答案:

答案 0 :(得分:2)

本声明:

if (rNumber3 != rNumber1 || rNumber2){

不符合你的想法。

“||”优先级低于“!=”,所以你所拥有的相当于:

if ((rNumber3 != rNumber1) || (rNumber2 != 0)) {

C(和Objective-C)中的“!=”运算符总是只适用于2个参数;要将一个数字与其他数字进行比较,您需要每次都明确重复第一个数字:

if (rNumber3 != rNumber1 || rNumber3 != rNumber2)

PS。以下评论不正确:

int rNumber6 = rand() % 45 + 1;  // 45 because it chooses from 0 to 45 then we add one, max 46

rand() % 45返回0到44之间的值,而不是0到45

答案 1 :(得分:2)

使用NSMutableSet处理相同的数字,

NSMutableSet * numberSet = [NSMutableSet setWithCapacity:5];
while ([numberSet count] < 5 ) {
    NSNumber * randomNumber = [NSNumber numberWithInt:(arc4random() % 56 + 1)];
    [numberSet addObject:randomNumber];
}

NSArray * numbers = [numberSet allObjects];

textView01.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:0]];
textView02.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:1]];
textView03.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:2]];
textView04.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:3]];
textView05.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:4]];

顺便说一下,arc4random() % 55 + 1会给你1到55之间的数字,包括两者而不是56.