私は、チュートリアルでは、hereとラインでの提供続いている:T1のJavaの三項式はどのように評価されますか?
boolean t1 = false?false:true?false:true?false:true;
最終的な値はfalseです。私はそれを真と評価した。 最初のfalseはtrueを返し、trueがfalseを返し、さらに最後にtrueを返します 私は正しいですか?いいえ、私は間違っています。 Javaでの三項式の評価方法を教えてください。
私は、チュートリアルでは、hereとラインでの提供続いている:T1のJavaの三項式はどのように評価されますか?
boolean t1 = false?false:true?false:true?false:true;
最終的な値はfalseです。私はそれを真と評価した。 最初のfalseはtrueを返し、trueがfalseを返し、さらに最後にtrueを返します 私は正しいですか?いいえ、私は間違っています。 Javaでの三項式の評価方法を教えてください。
コンパイラが?
文字を見つけたら、対応する:
を探します。 ?
の前の式は、条件を表す三項条件演算子の最初のオペランドです。
?
と:
の間の式は、条件が真である場合に値が返される演算子の第2オペランドです。
:
の後の式は、条件がfalseの場合に値が返される演算子の3番目のオペランドです。
boolean t1 = false ? false : true?false:true?false:true;
first second third
operand operand operand
最初のオペランドがfalseであるので、結果はそうのは、それを評価させ、第三オペランドtrue?false:true?false:true
の値である:
true ? false : true?false:true;
first second third
operand operand operand
最初のオペランドが真であるので、結果が第二の値であり、オペランド - false
。
ところで、第三のオペランドtrue?false:true
の値もfalse
ので、関係なくx
の値の偽x?false:true?false:true
戻ります。
申し訳ありませんが、どのようにオペランドが区切られているか教えてください。すなわち第1の第2および第3のオペランドは実際には何かである。私はJava言語の初心者です。 –
@BibekGhimire私は答えを編集しました。 – Eran
これらの操作は、結合規則に従って再編成できます。
boolean t1 = (false ? false : (true ? false : (true ? false : true)));
| | |
| | 1
| 2
3
は理論的には、これが最初に評価された経験1
false
として評価されているものです。true? false : false
です。したがって、最終出力はfalse
です。false ? false : false
になります。これはfalse
です。今、技術的な取得するには、これは実際には何が起こるかです:
false ? (don't care) : (...)
ある - 経験2と評価される経験1の必要性を含む>内部表現。true: false, (don't care)
です。すでにExp 2の値を決定しているので、Exp 1を評価する必要はありません。false ? (don't care) : false
に再評価されました。したがって、最終回答はfalse
です。実際、あなたが「経験1」で示したことは決して評価されません。それはデッドコードです。 – Eran
@Eran私は初心者のための技術的なものを手に入れようとしていませんでした。しかし、私は言及することが重要だと思います。更新しました。 –
以下の擬似コードは、式が評価される方法を示しています。それを見て
boolean t1 = false?false:true?false:true?false:true
= true && (true ? false : true ? false : true)
= true && false
= false
別の方法:その後、
boolean t1 = !false && (true ? false : true ? false : true);
:
boolean t1 = false?false:true?false:true?false:true;
はに簡素化することができます簡略化:
;最終的false
もたらす
boolean t1 = true && false;
:その後に単純化
boolean t1 = true && (true ? false : true ? false : true);
あなたのコードは 'boolean t1 =!false &&(true?false:true?false:true);'常に 'false'に単純化できます。 –
括弧/かっこを使用して、この1つであなたの人生を楽にしてください。 – Shark