这是我从1-99生成随机数的代码,但它每次只生成相同的数字组(15个数字)。我将这些数字存储在NSArray
中并正确地输出NSLog
。没关系,但每当我调用这种随机方法时,我都想要不同的随机数集,没有重复的数字。有人能帮帮我吗?
-(void) randoms
{
myset=[[NSArray alloc]init];
int D[20];
BOOL flag;
for (int i=0; i<15; i++)
{
int randum= random()%100;
flag= true;
int size= (sizeof D);
for (int x=0; x<size; x++)
{
if (randum == D[x])
{
i--;
flag= false;
break;
}
}
if (flag) D[i]=randum;
}
for (int j=0; j<15; j++)
{
myset=[myset arrayByAddingObject:[NSNumber numberWithInt:D[j]]];
}
NSLog(@"first set..%@",myset.description);
}
答案 0 :(得分:2)
您必须在使用之前播种生成器。如果要跳过播种,可以使用 arc4random_uniform()。这是一种不同的算法,它自己负责播种过程。除此之外,您可以在代码中使用它,就像使用 random()一样。您只需将上限指定为参数,而不是使用modulo:
-(void) randoms
{
myset=[[NSArray alloc]init];
int D[20];
BOOL flag;
for (int i=0; i<15; i++)
{
int randum= arc4random_uniform(100);
flag= true;
int size= (sizeof D);
for (int x=0; x<size; x++)
{
if (randum == D[x])
{
i--;
flag= false;
break;
}
}
if (flag) D[i]=randum;
}
for (int j=0; j<15; j++)
{
myset=[myset arrayByAddingObject:[NSNumber numberWithInt:D[j]]];
}
NSLog(@"first set..%@",myset.description);
}
答案 1 :(得分:0)
在启动arc4random之前尝试此命令
srand(time(NULL));
答案 2 :(得分:0)
如果我理解正确你想要一个在1-99之间包含15个随机数的集合。您可以使用以下内容:
- (NSSet *)randomSetOfSize:(int)size lowerBound:(int)lowerBound upperBound:(int)upperBound {
NSMutableSet *randomSet=[NSMutableSet new];
while (randomSet.count <size) {
int randomInt=arc4random_uniform(upperBound-lowerBound)+lowerBound;
NSNumber *randomNumber=[NSNumber numberWithInt:randomInt];
[randomSet addObject:randomNumber];
}
return randomSet;
}
并用
调用它NSSet *myRandomSet=[self randomSetOfSize:14 lowerBound:1 upperBound:99];