0
boolean a = true    
boolean b = true

<random code in here, booleans may or may not change>

if ((!a || !b) || (!a && !b)){
    doSomethingElse();
}

このコードはうまくいきません。この問題の簡単な解決策は何ですか?

明確にするために: if ステートメントは機能するはずです: ブール値の少なくとも 1 つが false の場合

3 ケース:

a = False b = True
a = True b = False
a = False b = False

1 つの長い if ステートメントでこれを行うことができましたが、これを実装する簡単な方法があるかどうか疑問に思っていました。

4

7 に答える 7

4

これはあなたのために働くはずです:

if( !a || !b ) {
  doSomething();
}
于 2013-01-24T04:35:44.733 に答える
4
if(!(a && b)) {  
  ....Then do something 
}
于 2013-01-24T04:37:07.853 に答える
1

(時間かかりすぎ、論理崩壊)

De Morganを適用して外側を取得することから!始めます。

つまり、次のようになります。

  1. (!a || !b)(DMで) →!(a && b)そして
  2. (!a && !b)(DMで) → !(a || b).

次に(!a || !b) || (!a && !b)(代入による) -> !(a && b) || !(a || b).

DMの再申請:

!( (a && b) && (a || b) )

現在、「v に対する ^ の分配性」を使用しています( x = a && b; y = a; z = b):

!( ((a && b) && a) || ((a && b) && b) )

そして「連想性」と「コミュニケーション性」によって:

!( (a && a && b) || (a && b && b) )

そして「冪等性」によって:

!( (a && b) || (a && b) )
!( (a && b) )

簡略化:

!(a && b)

DMで返信:

!a || !b

もちろん、単純な真理値表の方が、これを示すのが簡単だったかもしれません..

于 2013-01-24T04:51:54.370 に答える
1

if ステートメントは、if ステートメントを次のように変更するだけで機能します。

if (!a || !b) { } 上記のように、ブール値のいずれかが false の場合に機能します。

ではごきげんよう。

于 2013-01-24T07:01:51.177 に答える
0

提案されたソリューションは次のように単純化できます...

if (!a || !b) { .... }
于 2013-01-24T04:35:19.197 に答える
0

一方が偽か両方が偽かをチェックすることで、両方が真か、またはa && b. の反対a && bは次の!a || !bとおりです。

if (!a || !b) {
    doSomethingElse();
}
于 2013-01-24T04:36:23.480 に答える
0
if (!(a && b)) {
    doSomethingElse();
}
于 2013-01-24T04:40:57.320 に答える