Цикл операторов не работает должным образом
Я не понимаю, почему этот цикл не будет цикл! Любая помощь приветствуется. Почему-то i++ не работает??
BusTypeForSectionsFirst содержит массив из нескольких букв, то есть от A до Z. (различное количество каждой буквы)
TempArray - это массив от A до Z.
Мой журнал выглядит так: х26 раз.
2013-01-08 11: 17: 53.596 Приложение [969:c07] i = 0
2013-01-08 11: 17: 53.596 Приложение [969:c07] Количество i в массиве = 2
2013-01-08 11: 17: 53.596 Приложение [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 ответа
Не уверен, что вы пытаетесь достичь. Но вы можете попробовать этот код,
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 в цикл, он выйдет из него и вернется из метода. В вашем случае вы пытаетесь вернуться в оба if
а также else
состояние, которое приведет к for
цикл для выполнения только один раз. И ваш return [countedSet countForObject:[tempArray objectAtIndex:i]];
никогда не будет выполнен, так как вы добавляете return 0;
до этого.
Если вы хотите разорвать цикл for, вам нужно использовать break;
заявление. return
вернется из метода и не выполнит оставшуюся часть кода ниже.
Классическая ошибка копирования и вставки! один из return 0
должен быть удален. Угадай, какой!
Он не будет зацикливаться, потому что как в истинной, так и в ложной части if
Скажите, вы вернетесь из функции!
Я подозреваю return 0
утверждение может быть лишним, из-за этой маленькой красоты:
return 0;
return [countedSet countForObject:[tempArray objectAtIndex:i]];
который только когда-нибудь вернется 0
- второй return
быть недоступным кодом.
Однако я не могу быть уверен в этом на основании предоставленной информации. Мой комментарий остается в силе - цикл будет повторяться только один раз из-за return
операторы во всех путях кода.