Iphone 生成唯一编号
我正在尝试为bingo应用程序生成一个唯一的数字,现在它选择1-90之间的90个随机数,并将它们添加到NSMutableSet。这一切都是可行的,但我从集合中选择的数字是唯一的,因此相同的数字会被提取两次 以下是我到目前为止的情况:Iphone 生成唯一编号,iphone,objective-c,ios,arrays,Iphone,Objective C,Ios,Arrays,我正在尝试为bingo应用程序生成一个唯一的数字,现在它选择1-90之间的90个随机数,并将它们添加到NSMutableSet。这一切都是可行的,但我从集合中选择的数字是唯一的,因此相同的数字会被提取两次 以下是我到目前为止的情况: NSMutableSet * numberSet1 = [NSMutableSet setWithCapacity:90]; while ([numberSet1 count] < 90 ) { NSNumber * randomNumber1 = [
NSMutableSet * numberSet1 = [NSMutableSet setWithCapacity:90];
while ([numberSet1 count] < 90 ) {
NSNumber * randomNumber1 = [NSNumber numberWithInt:(arc4random() % 90 + 1)];
[numberSet1 addObject:randomNumber1];
}
//NSLog(@"numberWithSet : %@ \n\n",numberSet1);
NSArray * numbers = [numberSet1 allObjects];
//to display
int r = arc4random() % [numbers count];
if(r<[numbers count]){
numberLabel.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:r]];
}
NSMutableSet*numberSet1=[NSMutableSet setWithCapacity:90];
而([numberSet1计数]<90){
NSNumber*randomNumber1=[NSNumber numberWithInt:(arc4random()%90+1)];
[numberSet1 addObject:randomNumber1];
}
//NSLog(@“numberWithSet:%@\n\n”,numberSet1);
NSArray*编号=[numberSet1 allObjects];
//显示
int r=arc4random()%[数字计数];
如果(r作为使用arc4random()
拾取随机数的替代方法(这可能是宾果游戏中不需要的):
取一个数字1到90的数组
那个阵列
从数组中选择第一个数字,然后选择第二个,依此类推
保留数组中当前选定元素的索引。若要获取下一个数字,请递增并检查是否取消引用第90个元素
一些伪代码:
#define SIZE 90
unsigned int index;
unsigned int elements[SIZE];
/* step 1 -- populate the array with elements 1 through 90 */
for (index = 0; index < SIZE; index++)
elements[index] = index + 1;
/* step 2 -- shuffle the array */
fisher_yates_shuffle(elements);
/* step 3 -- read from the array */
for (index = 0; index < SIZE; index++)
fprintf(stdout, "element at index %u is %u\n", index, elements[index]);
#定义尺寸90
无符号整数索引;
无符号整数元素[大小];
/*步骤1——用元素1到90填充数组*/
对于(索引=0;索引
这将创建并洗牌一个数组
// array to shuffle
NSMutableArray *array = [NSMutableArray array];
for(int i=1; i<91; i++){
[array addObject:[NSNumber numberWithInt:i]];
}
// shuffle
for (int i = [array count]-1; i>0; i--) {
[array exchangeObjectAtIndex:i withObjectAtIndex:arc4random()%(i+1)];
}
//要洗牌的数组
NSMutableArray*数组=[NSMutableArray];
对于(int i=1;i0;i--){
[数组交换对象索引:i与对象索引:arc4random()%(i+1)];
}
不确定这是否是您想要的,因为从1-90中随机选取90个数字,没有重复项,并将其添加到可变集合与将所有内容添加到可变集合没有区别。但是,如果您想要90个数字的子集,只需从数组中提取多达n个元素。来自我不久前编写的彩票应用程序,也适用于这里-
int ball[6], counter, check, similarity;
for ( counter = 1; counter <= 6; counter++ )
{
for (;;)
{
similarity = 0;
ball[counter] = 1 + arc4random() % 6;
for (check = counter-1; check >= 1;check--)
{
if ( ball[check] == ball[counter] )
{
similarity = 1;
break;
}
}
if(similarity == 0)
break;
}
printf("%i\n", ball[counter]);
}
int-ball[6],计数器,检查,相似性;
对于(计数器=1;计数器=1;检查--)
{
如果(球[检查]==球[计数器])
{
相似性=1;
打破
}
}
如果(相似性==0)
打破
}
printf(“%i\n”,ball[计数器]);
}
将所选的球与之前的所有球进行检查,将永远不会得到相同的数字两次。在NSMutableArray上创建一个类别
@implementation NSMutableArray (RandomUtils)
-(void)shuffle
{
NSUInteger count = [self count];
for (NSUInteger i = 0; i < count; ++i) {
NSUInteger nElements = count - i;
NSUInteger n = (arc4random() % nElements) + i;
[self exchangeObjectAtIndex:i withObjectAtIndex:n];
}
}
@end
需要时,导入类别,并执行以下操作:
NSMutableArray *array = [NSMutableArray array];
for(int i=0; i<90; i++){
[array addObject:[NSNumber numberWithInt:i+1]];
}
[array shuffle];
NSArray *newarray = [array subarrayWithRange:NSMakeRange(0,6)];
NSMutableArray*array=[NSMutableArray];
对于(int i=0;该代码似乎创建了一个数组,其中数字1-90以随机顺序排列,没有重复。您希望它做什么,它实际上在做什么?@rmaddy当我尝试在标签中显示数字时,它会给我重复的数字,我使用以下命令来显示int r=arc4random()%[numbers count];如果(为什么你要创建一个随机数字列表,然后从随机数组中获取一个随机元素?创建一个随机列表,然后按照从索引0到索引89的数组顺序获取它们。可能重复:同样,不应该从Objective-C开始的人。从Java开始。你不会创建那个“杀手应用程序”很快从Objective-C开始,你就永远学不到基础知识了。谢谢Alex,我有点笨。你能给我一个从第三点开始的开头吗?投票失败有什么原因吗?
NSMutableArray *array = [NSMutableArray array];
for(int i=0; i<90; i++){
[array addObject:[NSNumber numberWithInt:i+1]];
}
[array shuffle];
NSArray *newarray = [array subarrayWithRange:NSMakeRange(0,6)];
@implementation NSArray (RandomUtils)
-(id)randomElement
{
if ([self count] < 1) return nil;
NSUInteger randomIndex = arc4random() % [self count];
return [self objectAtIndex:randomIndex];
}
@end
NSMutableSet *mset = [NSMutableSet set];
while ([mset count]<6) {
[mset addObject:[array randomElement]];
}