for语句循环不能按预期工作

时间:2013-01-08 01:24:51

标签: ios arrays for-loop count nsmutablearray

我不明白为什么这个for循环不会循环!任何帮助赞赏。出于某种原因,i ++不起作用?

busTypeForSectionsFirst包含多个字母的数组,即A到Z.(每个字母的数量不同)

tempArray是一个从A到Z的数组。

我的日志如下:x26次。

  

2013-01-08 11:17:53.596 App [969:c07] i = 0

     

2013-01-08 11:17:53.596 App [969:c07]数组中的i计数= 2

     

2013-01-08 11:17:53.596 App [969:c07]搜索对象 - A

NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:busTypeForSectionsFirst];

NSLog(@"%@", countedSet);

for (int i=0; i<=26; i++) {
    if (![countedSet countForObject:[tempArray objectAtIndex:i]]) {
        NSLog(@"Nil");
        NSLog(@"i = %i", i);
        NSLog(@"Count of i in array = %i", [countedSet countForObject:[tempArray objectAtIndex:i]]);
        NSLog(@"Object searched - %@", [tempArray objectAtIndex:i]);
        return 0;
    } else {
        NSLog(@"i = %i", i);
        NSLog(@"Count of i in array = %i", [countedSet countForObject:[tempArray objectAtIndex:i]]);
        NSLog(@"Object searched - %@", [tempArray objectAtIndex:i]);
        return 0;
        return [countedSet countForObject:[tempArray objectAtIndex:i]];
    }}

return 0;

3 个答案:

答案 0 :(得分:1)

不确定您要实现的目标。但你可以试试这段代码,

NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:busTypeForSectionsFirst];

NSLog(@"%@", countedSet);

NSInteger returnVal = 0;

for (int i=0; i<=26; i++) {
    if (![countedSet countForObject:[tempArray objectAtIndex:i]]) {
        NSLog(@"Nil");
        NSLog(@"i = %i", i);
        NSLog(@"Count of i in array = %i", [countedSet countForObject:[tempArray objectAtIndex:i]]);
        NSLog(@"Object searched - %@", [tempArray objectAtIndex:i]);
    } else {
        NSLog(@"i = %i", i);
        NSLog(@"Count of i in array = %i", [countedSet countForObject:[tempArray objectAtIndex:i]]);
        NSLog(@"Object searched - %@", [tempArray objectAtIndex:i]);
        returnVal = [countedSet countForObject:[tempArray objectAtIndex:i]];
        //break; //probably a break statement here is what you are looking for
    }
}

return returnVal;

如果在循环中放入一个return语句,它将从那里退出并从方法返回。在您的情况下,您尝试以ifelse条件返回,这将导致for循环仅执行一次。由于您在此之前添加了return [countedSet countForObject:[tempArray objectAtIndex:i]];,因此return 0;永远不会被执行。

如果要打破for循环,则需要使用break;语句。 return将从方法返回,并且不会执行下面的其余代码。

答案 1 :(得分:0)

它不会循环,因为在if语句的true和false部分,从函数返回!

我怀疑return 0声明可能是多余的,因为这个小小的美丽:

return 0;
return [countedSet countForObject:[tempArray objectAtIndex:i]];

只会永远返回0 - 第二个return无法访问的代码。

但是,根据给出的信息,我无法确定。我的评论仍然存在 - 由于所有代码路径中的return语句,循环只会迭代一次。

答案 2 :(得分:0)

经典的复制和粘贴错误!其中一个return 0必须删除。猜猜哪一个!