2011-07-04 20 views
-3

可能重複:
what does the exclamation mark in Objective C means in 「if (![」爲什麼邏輯NOT的行仍然會做YES會做什麼?

在我剛纔的問題我不太清楚。令我百思不解的是,爲什麼在這一行:

if (![txtOperator.text isEqualToString: @"+"]) { 
     int sum=a+b; 
     [result setText: [NSString stringWithFormat:@"%d", sum]]; 

    } 

操作數相加,結果顯示,即使使用NOT操作它不該發生的事情,當我添加以下代碼行計算器繼續做加法唯一沒有按不管你在那裏放置什麼操作員。

else if (![txtOperator.text isEqualToString: @"-"]) { 
     int sum=a-b; 
     [result setText: [NSString stringWithFormat:@"%d", sum]]; 
    } 
    else if (![txtOperator.text isEqualToString: @"/"]) { 
     int sum=a/b; 
     [result setText: [NSString stringWithFormat:@"%d", sum]]; 

    } 
    else if (![txtOperator.text isEqualToString: @"*"]) { 
     int sum=a * b; 
     [result setText: [NSString stringWithFormat:@"%d", sum]]; 


    } 
+1

爲什麼你首先有那些'!'?如果字符串相等,則isEqualToString返回YES;否則返回NO。如果操作數不是「@」+「',爲什麼要添加? – zneak

+0

請不要破壞你的帖子。一旦你發佈了一個問題,你已經將內容授權給了Stack Overflow社區(在CC-by-SA許可下)。如果您想取消關聯此帳戶與您的帳戶的關聯,請參閱[解除請求的正確途徑](http://meta.stackoverflow.com/questions/323395/what-is-the-proper-route-for -a解離請求)? –

+0

@CalT嚴重嗎?你正在發表對6年前的問題的評論?! – BanzaiTokyo

回答

5

讓我們來看看你在這裏詳細做什麼:

[txtOperator.text isEqualToString: @"-"] 

您檢查是否txtOperator.text等於@ 「 - 」。

所以如果是-,它將返回YES。其他NO

然後你就否定這個說法:

![txtOperator.text isEqualToString: @"-"] 

現在是不是一個-將返回YES一切。

而且只有-將返回NO

因此,在您的示例中,在每種情況下都會輸入if-子句,但在字符串匹配時輸入。要檢查字符串匹配,請忽略NOT運算符。

+0

我刪除了!到處都是,現在它不符合任何條件:(如何檢查用戶是否在運算符字段中輸入「+」? – BanzaiTokyo

+1

快速測試方法是在調用之前放置NSLog語句以查看txtOperator.text '實際上包含這樣的:'NSLog(@「%@」,txtOperator.text);' – 0x90

+0

Upvoted讓你得到你的1k :-) – sidyll

1

一些magick:

NSString * a = nil; 
    if (![a isEqualToString:@"A"]) { 
    NSLog(@"A"); 
    } 
    if (![a isEqualToString:@"B"]) { 
    NSLog(@"B"); 
    } 

輸出:

A 
    B 

不夠清楚?小心發送消息到零。

1

試着想象你的代碼中會發生什麼。假設您的運營商是@"-"。現在,在第一次測試

[txtOperator.text isEqualToString: @"+"] 

將返回NO。但是,你否定了這個(!),所以它變成了YES,你的if條件成功了。

如果您的操作員是什麼(除了@"+"),它將始終在第一次測試中成功。現在,如果是@"+",則第二次測試將成功。你能想象爲什麼?

+0

問題是用@「+」第一次成功了:) – BanzaiTokyo

+0

@SergeyE:嗯,我不這麼認爲。檢查它是真的「@」+「',而不是」@「+」'或類似的東西。問題可能在其他地方困難。 – sidyll

相關問題