循环内的循环?

问题描述:

我有两个可变数组,当我从数组中删除对象时,索引会改变,我需要'rpoint'值和'rsprite'值在循环和重复代码时减少一个。循环内的循环?

这是我到目前为止它的工作原理,当我有这个。

CGPoint cg1 = CGPointMake(33,33); 
    NSValue *cg1obj = [NSValue valueWithCGPoint:cg1]; 

    CGPoint cg2 = CGPointMake(33,97); 
    NSValue *cg2obj = [NSValue valueWithCGPoint:cg2]; 

    NSMutableArray *numberxy = [[NSMutableArray alloc] initWithCapacity:2]; int pointcount = 0; 
    [numberxy insertObject:cg1obj atIndex:pointcount++]; 
    [numberxy insertObject:cg2obj atIndex:pointcount++]; 

    CGPoint red1point = CGPointMake(red1.position.x,red1.position.y); 
    NSValue *red1pointobj = [NSValue valueWithCGPoint:red1point]; 

    CGPoint red2point = CGPointMake(red2.position.x,red2.position.y); 
    NSValue *red2pointobj = [NSValue valueWithCGPoint:red2point]; 

    NSMutableArray *sprites = [[NSMutableArray alloc] initWithCapacity:2]; int spritecount = 0; 
    [sprites insertObject:red1pointobj atIndex:spritecount++]; 
    [sprites insertObject:red2pointobj atIndex:spritecount++]; 



    for (int i=0; i<3;i++) { 
     int rpoint; 
     int rsprite; 

     do{ 
      rpoint = arc4random() % 2; 
     rsprite = arc4random() % 2; 
     } while (rpoint == 0 && rsprite == 0); 

     CGPoint point = [[numberxy objectAtIndex:rpoint] CGPointValue]; 

     CGPoint sprite = [[sprites objectAtIndex:rsprite] CGPointValue]; 

     sprite = ccp(point.x,point.y); 
     CCSprite *sprite1; 

     if (rsprite <3) { 
      sprite1 = [CCSprite spriteWithFile:@"Red tile.png"]; 
      sprite1.position = sprite; 
      sprite1.scale = 0.9; 
      [self addChild:sprite1]; 
     } 
    } 

但只要我添加到这个for循环它不工作,我实现了索引号改变阵列中的对象被移除,并使得产生随机数的范围内时对于整数rpoint和rsprite(用于获取随机索引号)需要在代码重复时减1,但我不确定如何执行此操作。

if (sprite1.position.x == point.x && sprite1.position.y == point.y) { 
      [numberxy removeObjectAtIndex:rpoint]; 
      [sprites removeObjectAtIndex:rsprite]; 
     } 

,你可以得到一个基于对象的数组像这样数量的随机数:

do{    
    rpoint = arc4random() % [numberxy count]; 
    rsprite = arc4random() % [sprites count]; 
} while (rpoint == 0 && rsprite == 0); 
+0

感谢兄弟,这真的有帮助:) – Dangermouse 2011-02-08 16:32:09

这是一个非常糟糕的主意,当你遍历从数组中删除项目它。

建议您可以改为执行某项操作,以保留另一个“要删除项目”的数组(最好是实际存储的对象指针,而不是索引),然后在确定了要删除的所有对象时从你的数组中,遍历这个“要删除的项目”列表,并找到主数组中的每个对象,然后将其删除。

+0

谢谢我想这样做,但戴夫的代码做了我想要的很多代码:) – Dangermouse 2011-02-08 16:32:35