2015-09-02 28 views
-2

我想返回數組中最小的數字。從NSArray找到最低的NSInteger

參數:arrayOfNumbers - 一個NSNumbers數組。

返回:作爲NSInteger的數組中的最小數字。

我到目前爲止的代碼不會給我任何錯誤,但不會通過單元測試。我究竟做錯了什麼?

- (NSInteger) lowestNumberInArray:(NSArray *)arrayOfNumbers { 

    NSNumber* smallest = [arrayOfNumbers valueForKeyPath:@"@min.self"]; 
    for (NSInteger i = 0; i < arrayOfNumbers.count; i++) { 
     if (arrayOfNumbers[i] < smallest) { 
      smallest = arrayOfNumbers[i]; 
     } 
    } 

    NSInteger smallestValue = [smallest integerValue]; 
    return smallestValue; 

} 

這是單元測試:

- (void) testThatLowestNumberIsReturned { 
    NSInteger lowestNumber = [self.handler lowestNumberInArray:@[@3, @8, @-4, @0]]; 
    XCTAssertEqual(lowestNumber, -4, @"Lowest number should be -4."); 

    lowestNumber = [self.handler lowestNumberInArray:@[@83, @124, @422, @953, @1004, @9532, @-1000]]; 
    XCTAssertEqual(lowestNumber, -1000, @"Lowest number should be -1000.");  
} 
+1

您正在比較對象與c類型,導致im指針地址與int進行比較。 – vikingosegundo

+1

爲什麼你有這個循環呢?你已經在第一線獲得最低分。 – dan

+0

@vikingosegundo明白了!謝謝!我一直在追逐自己的尾巴。 LOL – ioskaveen

回答

3

此方法

NSNumber* smallest = [arrayOfNumbers valueForKeyPath:@"@min.self"]; 

將已經確定所述陣列中的最小數目,因此該方法內的環是多餘的(上的是完全錯誤的頂部,如圖@vikingosegundo聲明)。

+0

明白了,謝謝!我一直在追逐自己的尾巴。 – ioskaveen

2

您比較與C類型,從而導致即時指針地址對象被與一個int比較。

除了事實的最小的已經是最小的,因爲你使用的KVC collection operator@min.self(見格洛芬德回答),下面的代碼顯示了正確的比較

if (arrayOfNumbers[i] < smallest) 

應該

if ([arrayOfNumbers[i] compare:smallest] == NSOrderingAscending) 

if ([arrayOfNumbers[i] integerValue] < [smallest integerValue])