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 ステートメントを入れると、そこで終了し、メソッドから戻ります。あなたの場合、ループが1回だけ実行される条件と両方ifで返そうとしています。その前に a を追加しているため、実行されることはありません。elseforreturn [countedSet countForObject:[tempArray objectAtIndex:i]];return 0;

for ループを中断したい場合は、break;ステートメントを使用する必要があります。returnメソッドから戻り、その下の残りのコードは実行されません。

于 2013-01-08T01:31:27.967 に答える
0

ifステートメントの true 部分と false 部分の両方で関数から戻るため、ループしません。

return 0この小さな美しさのために、このステートメントは不要かもしれないと思います。

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

これは返されるだけです-20番目returnは到達不能コードです。

しかし、私は与えられた情報に基づいてそれを確信することはできません. 私のコメントはまだ残っています-returnすべてのコードパスのステートメントのために、ループは一度だけ繰り返されます。

于 2013-01-08T01:31:06.610 に答える
0

古典的なコピー アンド ペースト エラーです。いずれかをreturn 0削除する必要があります。どれだと思いますか!

于 2013-01-08T01:40:00.603 に答える