3

私は完全に困惑している単純なコードを持っています。

NSInteger ymax;
NSInteger ymin; 
NSInteger numberIndex1;
NSInteger numberIndex2;


for (NSNumber *theNumber in array2)
{
    if ([theNumber integerValue] > ymax) {
        ymax = [theNumber integerValue];
        numberIndex1 = [array2 indexOfObject:theNumber];
    }
}

for (NSNumber *theNumber in array2)
{
    if ([theNumber integerValue] < ymin) {
        ymin = [theNumber integerValue];
        numberIndex2 = [array2 indexOfObject:theNumber];
    }

} 

NSLog(@"Highest number: %d at index: %d", ymax, numberIndex1);
NSLog(@"Lowest number: %d at index: %d", ymin, numberIndex2);

NSLog は次のように出力されます。

最大数: 129171656 インデックス: -1073752392 (え??)

最小数: インデックス: 5 で 57 (正解)

この奇妙な行動をどう説明しますか?どちらの機能も同じように見えます。1つは機能し、もう1つは機能していませんか?私はこれでたくさん遊んできましたが、まだ指を置くことはできません。どんな助けでも大歓迎です/

4

5 に答える 5

2

以下のコードで最大数と最小数を取得できます。それはあなたを助けるかもしれません

NSNumber * max = [array2 valueForKeyPath:@"@max.intValue"];
NSNumber * min = [array2 valueForKeyPath:@"@min.intValue"];
NSUInteger numberIndex1 = [array indexOfObject:min];
NSUInteger numberIndex2 = [array indexOfObject:max];

NSLog(@"Max Value = %d and index = %d",[max intValue],numberIndex1);
NSLog(@"Min Value = %d and index = %d",[min intValue],numberIndex2);
于 2013-08-07T07:15:25.017 に答える
1

私が間違っていなければ、あなたは NSInteger のデフォルト値が 0 であると考えています。いいえ、ローカル自動変数であるため、0 であるとは限りません。初期化しないと、その値は不定です。

そのため、var のデフォルト値を設定する必要があります。ymax = -1; から始めます。

于 2013-08-07T07:25:53.557 に答える
-3

より正当な解決策は次のとおりです。


NSArray *originalArray = @[[NSNumber numberWithInt:91],
                               [NSNumber numberWithInt:12],
                               [NSNumber numberWithInt:99123],
                               [NSNumber numberWithInt:9],
                               [NSNumber numberWithInt:43234]];
NSArray *sortedArray = [originalArray sortedArrayUsingSelector:@selector(compare:)];
NSNumber *minNumber = [sortedArray objectAtIndex:0];
NSNumber *maxNumber = [sortedArray lastObject];
NSInteger minIndex = [originalArray indexOfObject:minNumber];
NSInteger maxIndex = [originalArray indexOfObject:maxNumber];
于 2013-08-07T07:27:32.183 に答える