Цикл операторов не работает должным образом

Я не понимаю, почему этот цикл не будет цикл! Любая помощь приветствуется. Почему-то 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 операторы во всех путях кода.

Другие вопросы по тегам