1

CodingBatで演習を行っています。このページでは、ソリューションに次のような言及があります。

  // The above can be shortened to:
  //   return ((aSmile && bSmile) || (!aSmile && !bSmile));
  // Or this very short version (think about how this is the same as the above)
  //   return (aSmile == bSmile);

ショートバージョンを説明するルールはありますか?論理積から等号にどのように移行しますか?

4

3 に答える 3

5

最初の条件は基本的に次のようになります。両方が真であるか、両方が偽であるか。それは、それらが等しい場合にのみ発生します。

Javaには、次の両方が出力されるブールオブジェクトのトラップがあることに注意してください。

Boolean aSmile=new Boolean(true),bSmile=new Boolean(true);
if((aSmile & bSmile) || (!aSmile && !bSmile)) { System.out.println("SAME"); }
if(aSmile!=bSmile)                            { System.out.println("NOT THE SAME"); }
于 2013-01-12T00:40:52.597 に答える
2

これら2つの式の同等性を説明する最も簡単な方法は、論理テーブルを作成することです。

aSmile  |  bSmile
   0         0     1
   0         1     0
   1         0     0
   1         1     1

aとbのすべての組み合わせを最初の式に接続すると、aSmileとbSmileが等しい場合にのみ最初の式が真であることがわかります。したがって、aSmile == bSmileは、両方が等しい場合にのみtrueを返します。

于 2013-01-12T00:43:57.317 に答える
2

評価が真の場合(aSmile && bSmile)、両方が真です。

真と評価された場合(!aSmile && !bSmile)、両方とも偽です。

したがって、これらの条件のいずれか(両方がTRUE、または両方がFALSE)が真の場合、長いバージョンはTRUEを返します。

(短いバージョンのように)最も簡単に尋ねられますが、aSmileとbSmileは同等ですか?

于 2013-01-12T00:44:12.963 に答える