2011-07-04 4 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演算子とそれが起こることになって、私は次の行を追加するときに電卓だけdoesnの追加を行うことを続けていなかったにもかかわらず、表示された結果あなたがそこに置いたオペレーターに関係なく。

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

あなたの投稿を破壊しないでください。質問を投稿したら、(CC-by-SAライセンスのもとで)大規模なスタックオーバーフローコミュニティにコンテンツのライセンスを取得しました。この投稿とアカウントとの関連付けを解除する場合は、[解約リクエストの適切なルートは何ですか]を参照してください(http://meta.stackoverflow.com/questions/323395/what-is-the-proper-route-for -a-dissociation-request)? –

+0

@CalT真剣に?あなたは6歳の質問にコメントを投稿していますか? – BanzaiTokyo

答えて

5

のは、あなたがここでは詳細にやっていることを見てみましょう:txtOperator.textが等しい場合は、チェックしている

[txtOperator.text isEqualToString: @"-"] 

@ " - "。

したがって、-の場合はYESが返されます。

NO

その後、あなたはこの文を否定:-ではありません今

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

すべてがYESを返します。

-のみがNOを返します。

したがって、if節は、文字列が一致するとすべてではなくと入力されます。文字列の一致をチェックするには、NOT演算子を省略します。

+0

私は削除しました!どこにでも、それはどんな条件とも一致しません:(ユーザがオペレータフィールドに "+"を入力したかどうかを確認するにはどうすればいいですか? – BanzaiTokyo

+1

テストの素早い方法は、コールの直前にNSLogステートメントを置いて、 'txtOperator.text '実際には以下のようになります:' NSLog(@ "%@"、txtOperator.text); ' – 0x90

+0

Upvotedので1kを得る:-) – sidyll

1

いくつかの魔術:

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

出力:

A 
    B 

十分クリア?メッセージを無制限に送信するように注意してください。

1

あなたのコードで何が起こるか想像してみてください。演算子が@"-"であるとします。今、最初のテストで

[txtOperator.text isEqualToString: @"+"] 

返されるNOです。しかし、これを否定すると(!)、YESになり、if条件が成立します。

オペレータが何でもあれば(@"+"を除く)、最初のテストでは常に成功します。今、それが@"+"なら、2番目のテストは成功します。なぜ想像できますか?

+0

問題は@ "+"それは初めて成功します:) – BanzaiTokyo

+0

@ SergeyE:うーん、私はそうは思わない。本当に '@" + "'であるかどうか、 '@" + "'などではないか確認してください。問題は他のどこか厳しいかもしれません。 – sidyll

関連する問題