有2数组 
    neWRadmonArray = [[NSMutableArray alloc] init];    RadmonArray = [[NSMutableArray alloc] init];
    [RadmonArray addObject:@"A"];
    [RadmonArray addObject:@"B"];
    [RadmonArray addObject:@"C"];
    [RadmonArray addObject:@"D"];
    [RadmonArray addObject:@"E"];
我现在随即从RadmonArray取出一条
-(NSString *) GenerateRandom{    int randomValue = arc4random()%5;//Generate 0 - 4
    NSString *returnRandom = [RadmonArray objectAtIndex:randomValue];
    int i;
    int total;
    bool existFlag=false;    if(returnRandom==@"A" && hasGenerateBlue==true){
        [self GenerateRandom];
    }
    for(i=0,total=[neWRadmonArray count];i<total;i++)
    {
        if (returnRandom == [neWRadmonArray objectAtIndex:i]){
            existFlag = true;
            break;
        }
    }
if(existFlag)//check if has generated.
    {
       [self GenerateRandom];
    }
    else
    {
       [neWRadmonArray addObject:returnRandom];//put generated shape into array
    }
    return returnRandom;

但是还是出重复的帮忙看看,,,

解决方案 »

  1.   

    发现这代码的问题在于:nsstring 记录了多个 值 ,但究竟怎么改呢
      

  2.   

    if(existFlag)//check if has generated.
      {
      [self GenerateRandom];
      }
      else
      {
      [neWRadmonArray addObject:returnRandom];//put generated shape into array
      }
      return returnRandom;感觉就像这里的原因,如果存在了,它会调用自身函数,是不是当执行完[self GenerateRandom];之后它还会继续执行后面,后面的return returnRandom,返回的并不是你调用的[self Gen...dom]中return的东西,而是返回的你在当前这次调用函数最初赋予的,所以应该返回不出你想要的其实是递归调用的[self GeneratRandom]方法中返回的值
      

  3.   

    int randomValue = arc4random()%5;//Generate 0 - 4
      NSString *returnRandom = [RadmonArray objectAtIndex:randomValue];
      int i;
      int total;
      bool existFlag=false;  if(returnRandom==@"A" && hasGenerateBlue==true){
      [self GenerateRandom];
      }
      for(i=0,total=[neWRadmonArray count];i<total;i++)
      {
      if (returnRandom == [neWRadmonArray objectAtIndex:i]){
      existFlag = true;
      break;
      }
      }
    if(existFlag)//check if has generated.
      {                         //这里就是你调用自身,相当于把函数内容又过一次,
      int randomValue = arc4random()%5;//Generate 0 - 4
      NSString *returnRandom2222 = [RadmonArray objectAtIndex:randomValue];
      int i;
      int total;
      bool existFlag=false;  if(returnRandom==@"A" && hasGenerateBlue==true){
      [self GenerateRandom];
      }
      for(i=0,total=[neWRadmonArray count];i<total;i++)
      {
      if (returnRandom == [neWRadmonArray objectAtIndex:i]){
      existFlag = true;
      break;
      }
      }
    if(existFlag)//check if has generated.
      {
      [self GenerateRandom];
      }
      else
      {
      [neWRadmonArray addObject:returnRandom];//put generated shape into array
      }
      return returnRandom;  //这里是你想要的,它是这个if语句中再次调用自身方法,得到的是returnRandom2

      }
      else
      {
      [neWRadmonArray addObject:returnRandom];//put generated shape into array
      }
      return returnRandom;//但这里才是你在其他调用此方法的方法中真正返回的。还是最初没有让exitsFlag为假的那个已经在newArray里的值
      

  4.   

    if(existFlag)//check if has generated.
      {
      [self GenerateRandom];
      }
      else
      {
      [neWRadmonArray addObject:returnRandom];//put generated shape into array
      }
      return returnRandom;

    而且你这段代码估计就有问题,generateRandom是有返回值的,怎么前面都没有赋值对象????
    改成if(existFlag)//check if has generated.
      {
      returnRandom=[self GenerateRandom];
      }
    然后尝试下