我在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];
答案 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.