2013-01-08 247 views
2

我不明白爲什麼這個for循環不會循環!任何幫助讚賞。出於某種原因,i ++不工作?for語句循環不按預期工作

的busTypeForSectionsFirst包含通過到Z的多個字母,即A的陣列(將不同量的每個字母的)

的tempArray是僅有的陣列通過以Z.

我的日誌看起來像這個:x26次。

2013年1月8日11:17:53.596應用[969:C07] I = 0

2013年1月8日11:17:53.596應用[969:C07]在陣列I的計數= 2

2013年1月8日11:17:53.596應用[969:C07]對象搜索 - 甲

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; 
+2

如果您在if和else中都添加return語句,它會在第一次迭代中返回本身嗎?你爲什麼期望它循環呢?並且這將永遠不會被調用'return [countingSet countForObject:[tempArray objectAtIndex:i]];'因爲'return 0'就在那裏。 – iDev

+0

是的,'return'語句將完全退出循環(和方法/函數)。 – Rob

回答

1

不知道你想達到什麼。但你可以試試這段代碼,如果你在循環中放置一個return語句,它將退出並從方法返回。在你的情況,你試圖返回ifelse條件,這將導致for循環只執行一次。而您的return [countedSet countForObject:[tempArray objectAtIndex:i]];將永遠不會執行,因爲您在此之前添加了return 0;

如果要打破for循環,則需要使用break;語句。 return將從該方法返回並且不會執行下面的代碼的其餘部分。

+0

謝謝你,這是打破for循環返回的雙倍:-) – MattysIT

0

它不會環路因爲在這兩種的真假份if聲明,您返回從功能!

我懷疑return 0聲明可能是多餘的,因爲這個小美女:

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

這隻會不斷返回0 - 第二return是無法訪問的代碼。

但是,我不能確定基於給出的信息。我的評論仍然站在 - 由於所有代碼路徑中的return語句,該循環只會迭代一次。

+0

這兩個回報打破了我的循環謝謝! – MattysIT

0

傳統的複製和粘貼錯誤!必須將其中一個return 0刪除。猜猜哪一個!

+0

我看到後,我張貼和刪除它,仍然破了:-) – MattysIT