Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 洗牌数组重复一个值_Iphone_Ios6_Nsmutablearray - Fatal编程技术网

Iphone 洗牌数组重复一个值

Iphone 洗牌数组重复一个值,iphone,ios6,nsmutablearray,Iphone,Ios6,Nsmutablearray,在这里,我使用了以下代码来洗牌NSMuttable数组,而洗牌数组只会重复一个值,其余所有值都正常工作,我应该对洗牌做什么更改而不重复 words = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3",@"4", nil] ; NSUInteger count = [words count]; for (int i = 0; i < count; i++) { NSInteger nElements = cou

在这里,我使用了以下代码来洗牌NSMuttable数组,而洗牌数组只会重复一个值,其余所有值都正常工作,我应该对洗牌做什么更改而不重复

words = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3",@"4", nil] ;
NSUInteger count = [words count];

for (int i = 0; i < count; i++)
   {
    NSInteger nElements = count - i;
    NSInteger n = (arc4random() % nElements) + i;
    NSLog(@"n val %d i val %d",i,n);
    [words exchangeObjectAtIndex:i withObjectAtIndex:n];
   }

请帮助我解决

问题,从您的
NSMutableArray
中删除重复项

// Removing duplicate entry from array
NSArray *copy = [words copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator])
{
    if ([words indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound)
    {
        [words removeObjectAtIndex:index];
    }
    index--;
}
[copy release];

您可以在每次添加对象时检查它。

要从
NSMutableArray
中删除重复项

// Removing duplicate entry from array
NSArray *copy = [words copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator])
{
    if ([words indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound)
    {
        [words removeObjectAtIndex:index];
    }
    index--;
}
[copy release];

您可以在每次添加对象时检查它。

此代码可能会帮助您

洗牌数组只包含0到总_数(数组大小)之间的每个数字一次

您可以从中洗牌现有阵列

@synthesize alreadyGeneratedNumbers;//this is a mutableArray.


int TOTAL_NUMBER=5;//size of array


-(int)generateRandomNumber{
    int low_bound = 0;
    int high_bound = TOTAL_NUMBER;
    int width = high_bound - low_bound;
    int randomNumber = low_bound + arc4random() % width;
    return randomNumber;
}


-(IBAction)randomNumbers:(UIButton *)sender
{

    NSMutableArray *startArray=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];

    NSMutableArray *shuffle = [NSMutableArray new];

    BOOL contains=YES;
    while ([shuffle count]<5) {
        NSNumber *generatedNumber=[NSNumber numberWithInt:[self generateRandomNumber]];
        //NSLog(@"->%@",generatedNumber);

        if (![alreadyGeneratedNumbers containsObject:generatedNumber]) {
            [shuffle addObject:generatedNumber];
            contains=NO;
            [alreadyGeneratedNumbers addObject:generatedNumber];
        }
    }
    if ([alreadyGeneratedNumbers count] >= TOTAL_NUMBER) {
        NSLog(@"\nOne shuffel ended.....what to reshuffle");
        [alreadyGeneratedNumbers removeAllObjects];
    }

    NSMutableArray *shuffledArray=[NSMutableArray new];
    for (NSNumber *index in shuffle) {
        [shuffledArray addObject:[startArray objectAtIndex:[index integerValue]]];
    }
    NSLog(@"Shuffled array = %@",shuffledArray);
}
@synthesis-alreadygeneratednumber//这是一个可变数组。
整数总数=5//数组大小
-(int)GeneratorDomainNumber{
int低_界=0;
int high_bound=总数量;
int width=高_界-低_界;
int randomNumber=下限+arc4random()%宽度;
返回随机数;
}
-(iAction)随机数:(UIButton*)发送方
{
NSMUTABLEARRY*startArray=[NSMUTABLEARRY数组,其对象为:@“1”、“2”、“3”、“4”、“5”、“零];
NSMUTABLEARRY*shuffle=[NSMUTABLEARRY new];
布尔包含=是;
while([shuffle count]=总数){
NSLog(@“\nOne shuffel end.....................什么要改组”);
[AlreadyGeneratedNumber删除所有对象];
}
NSMutableArray*ShuffleArray=[NSMutableArray新建];
for(随机排列中的NSNumber*索引){
[ShuffleArray addObject:[startArray objectAtIndex:[index integerValue]];
}
NSLog(@“无序数组=%@”,无序数组);
}

此代码可能会帮助您

洗牌数组只包含0到总_数(数组大小)之间的每个数字一次

您可以从中洗牌现有阵列

@synthesize alreadyGeneratedNumbers;//this is a mutableArray.


int TOTAL_NUMBER=5;//size of array


-(int)generateRandomNumber{
    int low_bound = 0;
    int high_bound = TOTAL_NUMBER;
    int width = high_bound - low_bound;
    int randomNumber = low_bound + arc4random() % width;
    return randomNumber;
}


-(IBAction)randomNumbers:(UIButton *)sender
{

    NSMutableArray *startArray=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];

    NSMutableArray *shuffle = [NSMutableArray new];

    BOOL contains=YES;
    while ([shuffle count]<5) {
        NSNumber *generatedNumber=[NSNumber numberWithInt:[self generateRandomNumber]];
        //NSLog(@"->%@",generatedNumber);

        if (![alreadyGeneratedNumbers containsObject:generatedNumber]) {
            [shuffle addObject:generatedNumber];
            contains=NO;
            [alreadyGeneratedNumbers addObject:generatedNumber];
        }
    }
    if ([alreadyGeneratedNumbers count] >= TOTAL_NUMBER) {
        NSLog(@"\nOne shuffel ended.....what to reshuffle");
        [alreadyGeneratedNumbers removeAllObjects];
    }

    NSMutableArray *shuffledArray=[NSMutableArray new];
    for (NSNumber *index in shuffle) {
        [shuffledArray addObject:[startArray objectAtIndex:[index integerValue]]];
    }
    NSLog(@"Shuffled array = %@",shuffledArray);
}
@synthesis-alreadygeneratednumber//这是一个可变数组。
整数总数=5//数组大小
-(int)GeneratorDomainNumber{
int低_界=0;
int high_bound=总数量;
int width=高_界-低_界;
int randomNumber=下限+arc4random()%宽度;
返回随机数;
}
-(iAction)随机数:(UIButton*)发送方
{
NSMUTABLEARRY*startArray=[NSMUTABLEARRY数组,其对象为:@“1”、“2”、“3”、“4”、“5”、“零];
NSMUTABLEARRY*shuffle=[NSMUTABLEARRY new];
布尔包含=是;
while([shuffle count]=总数){
NSLog(@“\nOne shuffel end.....................什么要改组”);
[AlreadyGeneratedNumber删除所有对象];
}
NSMutableArray*ShuffleArray=[NSMutableArray新建];
for(随机排列中的NSNumber*索引){
[ShuffleArray addObject:[startArray objectAtIndex:[index integerValue]];
}
NSLog(@“无序数组=%@”,无序数组);
}


您想要什么?每个值只有一次?@anopvaidya是的,我希望每个值都在once@Dev_iOS请注意,复制的不是数组中的值,而是随机数。不要期望随机数不会重复,重复是随机性的一部分。Pi的十进制表示包含“代码>3141592653”/代码>中间的某处…@ H2CO3是的,你是对的。所以我认为每次在获取随机数(在for循环中)时,他必须检查数组中是否存在值。因为我已经编辑了我的答案。@Goti,我不确定你的意思,但是对于洗牌数组,这个算法看起来不错。你想要什么?每个值只有一次?@anopvaidya是的,我希望每个值都在once@Dev_iOS请注意,复制的不是数组中的值,而是随机数。不要期望随机数不会重复,重复是随机性的一部分。Pi的十进制表示包含“代码>3141592653”/代码>中间的某处…@ H2CO3是的,你是对的。所以我认为每次在获取随机数(在for循环中)时,他必须检查数组中是否存在值。因为我已经编辑了我的答案。@Goti,我不确定你的意思,但是对于洗牌数组,这个算法似乎很好。
initWithObjects:@“1”,“2”,“3”,“4”,nil
似乎不会创建任何重复项。@Goti,但它不是shufling,its显示相同的`array value 1 array value 2 array value 3 array value 4`
initWithObjects:@“1”、@“2”、@“3”、@“4”,nil
似乎没有创建任何重复项。@Goti但它没有shuflling,its显示相同的`array value 1 array value 2 array value 3 array value 4`初始无。但一旦生成一个随机变量,它就会被推到上面。对于生成的下一个随机数,它检查该数组,如果它存在,则查找另一个rnd数。就是这样。错误
由于未捕获的异常“NSRangeException”而终止应用程序,原因:“***-[\uu NSArrayM objectAtIndex:]:索引4超出边界[0..3]”
是的,我在([shuffle count]时更改为
,您是否也将总数更改为4?它正在工作,但它到达了最后的元素“4”它没有正确显示初始无。但一旦生成一个随机数,它就会被推送到该随机数上。对于生成的下一个随机数,它会检查该数组中是否存在,然后找到另一个rnd号。就是这样。错误
由于未捕获的异常“NSRangeException”终止应用程序,原因:'***-[\u NSArrayM objectAtIndex:]:索引4超出边界[0..3]'
是的,我在([shuffle count]时更改为
,您是否也将总数更改为4?它工作正常,但它到达了最后一个元素“4”,它没有正确显示