2

我不明白为什么这个 for 循环不会循环!任何帮助表示赞赏。出于某种原因,i++ 无法正常工作??

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

tempArray 是一个仅由 A 到 Z 组成的数组。

我的日志如下所示:x26 次。

2013-01-08 11:17:53.596 应用程序[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;
4

3 回答 3

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;之前添加了 a 。

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

于 2013-01-08T01:31:27.967 回答
0

if它不会循环,因为在语句的真假部分,你从函数中返回!

我怀疑这个return 0陈述可能是多余的,因为这个小美:

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

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

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

于 2013-01-08T01:31:06.610 回答
0

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

于 2013-01-08T01:40:00.603 回答